From 7f734fa1581b53c6ed539b9bc67d87624df0338b Mon Sep 17 00:00:00 2001
From: ridho0
Date: Tue, 25 Apr 2017 14:00:12 +0700
Subject: [PATCH 1/3] selesai
---
.gitignore | 1 +
README.md | 15 +-
app.js | 46 +
bin/www | 90 +
config/config.json | 23 +
controllers/user.js | 62 +
migrations/20170425040805-create-contact.js | 30 +
models/contact.js | 14 +
models/index.js | 36 +
node_modules/.bin/acorn | 1 +
node_modules/.bin/cleancss | 1 +
node_modules/.bin/cross-env | 1 +
node_modules/.bin/css-beautify | 1 +
node_modules/.bin/editorconfig | 1 +
node_modules/.bin/gulp | 1 +
node_modules/.bin/html-beautify | 1 +
node_modules/.bin/jade | 1 +
node_modules/.bin/js-beautify | 1 +
node_modules/.bin/mime | 1 +
node_modules/.bin/mkdirp | 1 +
node_modules/.bin/nopt | 1 +
node_modules/.bin/semver | 1 +
node_modules/.bin/sequelize | 1 +
node_modules/.bin/strip-bom | 1 +
node_modules/.bin/uglifyjs | 1 +
node_modules/.bin/user-home | 1 +
node_modules/.bin/uuid | 1 +
node_modules/.bin/which | 1 +
node_modules/@types/geojson/LICENSE | 21 +
node_modules/@types/geojson/README.md | 16 +
node_modules/@types/geojson/index.d.ts | 121 +
node_modules/@types/geojson/package.json | 80 +
node_modules/abbrev/LICENSE | 15 +
node_modules/abbrev/README.md | 23 +
node_modules/abbrev/abbrev.js | 61 +
node_modules/abbrev/package.json | 92 +
node_modules/accepts/HISTORY.md | 212 +
node_modules/accepts/LICENSE | 23 +
node_modules/accepts/README.md | 135 +
node_modules/accepts/index.js | 231 +
node_modules/accepts/package.json | 112 +
node_modules/acorn-globals/LICENSE | 19 +
node_modules/acorn-globals/README.md | 76 +
node_modules/acorn-globals/index.js | 180 +
node_modules/acorn-globals/package.json | 100 +
node_modules/acorn/.editorconfig | 7 +
node_modules/acorn/.gitattributes | 1 +
node_modules/acorn/.npmignore | 3 +
node_modules/acorn/.tern-project | 6 +
node_modules/acorn/.travis.yml | 6 +
node_modules/acorn/AUTHORS | 43 +
node_modules/acorn/LICENSE | 19 +
node_modules/acorn/README.md | 396 +
node_modules/acorn/bin/acorn | 71 +
node_modules/acorn/bin/build-acorn.js | 82 +
.../acorn/bin/generate-identifier-regex.js | 47 +
node_modules/acorn/bin/update_authors.sh | 6 +
node_modules/acorn/dist/.keep | 0
node_modules/acorn/dist/acorn.js | 3340 +
node_modules/acorn/dist/acorn_loose.js | 1300 +
node_modules/acorn/dist/walk.js | 377 +
node_modules/acorn/package.json | 222 +
node_modules/acorn/src/bin/acorn.js | 59 +
node_modules/acorn/src/expression.js | 707 +
node_modules/acorn/src/identifier.js | 90 +
node_modules/acorn/src/index.js | 67 +
node_modules/acorn/src/location.js | 24 +
node_modules/acorn/src/locutil.js | 42 +
node_modules/acorn/src/loose/acorn_loose.js | 0
node_modules/acorn/src/loose/expression.js | 501 +
node_modules/acorn/src/loose/index.js | 50 +
node_modules/acorn/src/loose/parseutil.js | 1 +
node_modules/acorn/src/loose/state.js | 160 +
node_modules/acorn/src/loose/statement.js | 420 +
node_modules/acorn/src/loose/tokenize.js | 108 +
node_modules/acorn/src/lval.js | 215 +
node_modules/acorn/src/node.js | 50 +
node_modules/acorn/src/options.js | 121 +
node_modules/acorn/src/parseutil.js | 102 +
node_modules/acorn/src/state.js | 104 +
node_modules/acorn/src/statement.js | 626 +
node_modules/acorn/src/tokencontext.js | 109 +
node_modules/acorn/src/tokenize.js | 682 +
node_modules/acorn/src/tokentype.js | 147 +
node_modules/acorn/src/util.js | 9 +
node_modules/acorn/src/walk/index.js | 340 +
node_modules/acorn/src/whitespace.js | 12 +
node_modules/align-text/LICENSE | 21 +
node_modules/align-text/README.md | 236 +
node_modules/align-text/index.js | 52 +
node_modules/align-text/package.json | 117 +
node_modules/amdefine/LICENSE | 58 +
node_modules/amdefine/README.md | 171 +
node_modules/amdefine/amdefine.js | 301 +
node_modules/amdefine/intercept.js | 36 +
node_modules/amdefine/package.json | 87 +
node_modules/ansi-regex/index.js | 4 +
node_modules/ansi-regex/license | 21 +
node_modules/ansi-regex/package.json | 133 +
node_modules/ansi-regex/readme.md | 39 +
node_modules/ansi-styles/index.js | 65 +
node_modules/ansi-styles/license | 21 +
node_modules/ansi-styles/package.json | 114 +
node_modules/ansi-styles/readme.md | 86 +
node_modules/ap/README.markdown | 61 +
node_modules/ap/examples/z.js | 5 +
node_modules/ap/index.js | 48 +
node_modules/ap/package.json | 94 +
node_modules/ap/test/curry.js | 137 +
node_modules/archy/.travis.yml | 4 +
node_modules/archy/LICENSE | 18 +
node_modules/archy/examples/beep.js | 24 +
node_modules/archy/examples/multi_line.js | 25 +
node_modules/archy/index.js | 35 +
node_modules/archy/package.json | 114 +
node_modules/archy/readme.markdown | 88 +
node_modules/archy/test/beep.js | 40 +
node_modules/archy/test/multi_line.js | 45 +
node_modules/archy/test/non_unicode.js | 40 +
node_modules/arr-diff/LICENSE | 21 +
node_modules/arr-diff/README.md | 74 +
node_modules/arr-diff/index.js | 58 +
node_modules/arr-diff/package.json | 119 +
node_modules/arr-flatten/LICENSE | 21 +
node_modules/arr-flatten/README.md | 85 +
node_modules/arr-flatten/index.js | 27 +
node_modules/arr-flatten/package.json | 139 +
node_modules/array-differ/index.js | 7 +
node_modules/array-differ/package.json | 95 +
node_modules/array-differ/readme.md | 41 +
node_modules/array-flatten/LICENSE | 21 +
node_modules/array-flatten/README.md | 43 +
node_modules/array-flatten/array-flatten.js | 64 +
node_modules/array-flatten/package.json | 96 +
node_modules/array-uniq/index.js | 62 +
node_modules/array-uniq/license | 21 +
node_modules/array-uniq/package.json | 105 +
node_modules/array-uniq/readme.md | 30 +
node_modules/array-unique/LICENSE | 21 +
node_modules/array-unique/README.md | 51 +
node_modules/array-unique/index.js | 28 +
node_modules/array-unique/package.json | 94 +
node_modules/asap/LICENSE.md | 20 +
node_modules/asap/README.md | 81 +
node_modules/asap/asap.js | 113 +
node_modules/asap/package.json | 73 +
node_modules/balanced-match/.npmignore | 5 +
node_modules/balanced-match/LICENSE.md | 21 +
node_modules/balanced-match/README.md | 91 +
node_modules/balanced-match/index.js | 58 +
node_modules/balanced-match/package.json | 110 +
node_modules/basic-auth/HISTORY.md | 35 +
node_modules/basic-auth/LICENSE | 24 +
node_modules/basic-auth/README.md | 78 +
node_modules/basic-auth/index.js | 108 +
node_modules/basic-auth/package.json | 110 +
node_modules/beeper/index.js | 60 +
node_modules/beeper/license | 21 +
node_modules/beeper/package.json | 106 +
node_modules/beeper/readme.md | 55 +
node_modules/bluebird/LICENSE | 21 +
node_modules/bluebird/README.md | 51 +
node_modules/bluebird/changelog.md | 1 +
.../bluebird/js/browser/bluebird.core.js | 3777 +
.../bluebird/js/browser/bluebird.core.min.js | 31 +
node_modules/bluebird/js/browser/bluebird.js | 5619 +
.../bluebird/js/browser/bluebird.min.js | 31 +
node_modules/bluebird/js/release/any.js | 21 +
node_modules/bluebird/js/release/assert.js | 55 +
node_modules/bluebird/js/release/async.js | 161 +
node_modules/bluebird/js/release/bind.js | 67 +
node_modules/bluebird/js/release/bluebird.js | 11 +
node_modules/bluebird/js/release/call_get.js | 123 +
node_modules/bluebird/js/release/cancel.js | 129 +
.../bluebird/js/release/catch_filter.js | 42 +
node_modules/bluebird/js/release/context.js | 69 +
.../bluebird/js/release/debuggability.js | 916 +
.../bluebird/js/release/direct_resolve.js | 46 +
node_modules/bluebird/js/release/each.js | 30 +
node_modules/bluebird/js/release/errors.js | 116 +
node_modules/bluebird/js/release/es5.js | 80 +
node_modules/bluebird/js/release/filter.js | 12 +
node_modules/bluebird/js/release/finally.js | 146 +
.../bluebird/js/release/generators.js | 223 +
node_modules/bluebird/js/release/join.js | 168 +
node_modules/bluebird/js/release/map.js | 168 +
node_modules/bluebird/js/release/method.js | 55 +
node_modules/bluebird/js/release/nodeback.js | 51 +
node_modules/bluebird/js/release/nodeify.js | 58 +
node_modules/bluebird/js/release/promise.js | 775 +
.../bluebird/js/release/promise_array.js | 185 +
node_modules/bluebird/js/release/promisify.js | 314 +
node_modules/bluebird/js/release/props.js | 118 +
node_modules/bluebird/js/release/queue.js | 73 +
node_modules/bluebird/js/release/race.js | 49 +
node_modules/bluebird/js/release/reduce.js | 172 +
node_modules/bluebird/js/release/schedule.js | 61 +
node_modules/bluebird/js/release/settle.js | 43 +
node_modules/bluebird/js/release/some.js | 148 +
.../js/release/synchronous_inspection.js | 103 +
node_modules/bluebird/js/release/thenables.js | 86 +
node_modules/bluebird/js/release/timers.js | 93 +
node_modules/bluebird/js/release/using.js | 226 +
node_modules/bluebird/js/release/util.js | 379 +
node_modules/bluebird/package.json | 141 +
node_modules/body-parser/HISTORY.md | 498 +
node_modules/body-parser/LICENSE | 23 +
node_modules/body-parser/README.md | 416 +
node_modules/body-parser/index.js | 157 +
node_modules/body-parser/lib/read.js | 188 +
node_modules/body-parser/lib/types/json.js | 175 +
node_modules/body-parser/lib/types/raw.js | 101 +
node_modules/body-parser/lib/types/text.js | 121 +
.../body-parser/lib/types/urlencoded.js | 279 +
.../node_modules/debug/.coveralls.yml | 1 +
.../body-parser/node_modules/debug/.eslintrc | 11 +
.../body-parser/node_modules/debug/.npmignore | 8 +
.../node_modules/debug/.travis.yml | 14 +
.../node_modules/debug/CHANGELOG.md | 316 +
.../body-parser/node_modules/debug/LICENSE | 19 +
.../body-parser/node_modules/debug/Makefile | 50 +
.../body-parser/node_modules/debug/README.md | 238 +
.../body-parser/node_modules/debug/bower.json | 29 +
.../node_modules/debug/component.json | 19 +
.../node_modules/debug/karma.conf.js | 70 +
.../body-parser/node_modules/debug/node.js | 1 +
.../node_modules/debug/package.json | 124 +
.../node_modules/debug/src/browser.js | 182 +
.../node_modules/debug/src/debug.js | 202 +
.../node_modules/debug/src/index.js | 10 +
.../node_modules/debug/src/node.js | 241 +
node_modules/body-parser/package.json | 125 +
node_modules/brace-expansion/README.md | 123 +
node_modules/brace-expansion/index.js | 201 +
node_modules/brace-expansion/package.json | 114 +
node_modules/braces/LICENSE | 21 +
node_modules/braces/README.md | 248 +
node_modules/braces/index.js | 399 +
node_modules/braces/package.json | 157 +
node_modules/buffer-shims/index.js | 108 +
node_modules/buffer-shims/license.md | 19 +
node_modules/buffer-shims/package.json | 86 +
node_modules/buffer-shims/readme.md | 21 +
node_modules/buffer-writer/.npmignore | 2 +
node_modules/buffer-writer/.travis.yml | 4 +
node_modules/buffer-writer/LICENSE | 19 +
node_modules/buffer-writer/README.md | 48 +
node_modules/buffer-writer/benchmark/index.js | 86 +
.../benchmark/int-16-benchmark.js | 31 +
.../benchmark/int-32-benchmark.js | 17 +
.../buffer-writer/benchmark/join-benchmark.js | 16 +
.../benchmark/resize-benchmark.js | 23 +
.../benchmark/small-benchmark.js | 14 +
node_modules/buffer-writer/index.js | 129 +
node_modules/buffer-writer/package.json | 97 +
node_modules/buffer-writer/test/mocha.opts | 1 +
.../buffer-writer/test/writer-tests.js | 218 +
.../builtin-modules/builtin-modules.json | 35 +
node_modules/builtin-modules/index.js | 10 +
node_modules/builtin-modules/license | 21 +
node_modules/builtin-modules/package.json | 104 +
node_modules/builtin-modules/readme.md | 41 +
node_modules/builtin-modules/static.js | 2 +
node_modules/bytes/History.md | 70 +
node_modules/bytes/LICENSE | 23 +
node_modules/bytes/Readme.md | 114 +
node_modules/bytes/index.js | 157 +
node_modules/bytes/package.json | 120 +
node_modules/camelcase/index.js | 27 +
node_modules/camelcase/license | 21 +
node_modules/camelcase/package.json | 102 +
node_modules/camelcase/readme.md | 56 +
node_modules/center-align/LICENSE | 21 +
node_modules/center-align/README.md | 74 +
node_modules/center-align/index.js | 16 +
node_modules/center-align/package.json | 121 +
node_modules/center-align/utils.js | 40 +
node_modules/chalk/index.js | 116 +
node_modules/chalk/license | 21 +
node_modules/chalk/package.json | 143 +
node_modules/chalk/readme.md | 213 +
node_modules/character-parser/.npmignore | 2 +
node_modules/character-parser/LICENSE | 19 +
node_modules/character-parser/README.md | 142 +
node_modules/character-parser/index.js | 231 +
node_modules/character-parser/package.json | 90 +
node_modules/clean-css/History.md | 1123 +
node_modules/clean-css/LICENSE | 19 +
node_modules/clean-css/README.md | 369 +
node_modules/clean-css/bin/cleancss | 183 +
node_modules/clean-css/index.js | 1 +
node_modules/clean-css/lib/clean.js | 231 +
.../lib/colors/hex-name-shortener.js | 186 +
node_modules/clean-css/lib/colors/hsl.js | 67 +
node_modules/clean-css/lib/colors/rgb.js | 16 +
node_modules/clean-css/lib/imports/inliner.js | 399 +
.../clean-css/lib/properties/break-up.js | 335 +
.../clean-css/lib/properties/can-override.js | 142 +
.../clean-css/lib/properties/clone.js | 26 +
.../clean-css/lib/properties/compactable.js | 285 +
.../lib/properties/every-combination.js | 28 +
.../clean-css/lib/properties/has-inherit.js | 10 +
.../lib/properties/invalid-property-error.js | 10 +
.../clean-css/lib/properties/optimizer.js | 215 +
.../lib/properties/override-compactor.js | 384 +
.../lib/properties/populate-components.js | 32 +
.../clean-css/lib/properties/remove-unused.js | 10 +
.../lib/properties/restore-from-optimizing.js | 60 +
.../clean-css/lib/properties/restore.js | 232 +
.../lib/properties/shorthand-compactor.js | 134 +
.../clean-css/lib/properties/validator.js | 197 +
.../lib/properties/vendor-prefixes.js | 26 +
.../lib/properties/wrap-for-optimizing.js | 118 +
.../clean-css/lib/selectors/advanced.js | 86 +
.../clean-css/lib/selectors/clean-up.js | 89 +
.../clean-css/lib/selectors/extractor.js | 69 +
.../clean-css/lib/selectors/is-special.js | 5 +
.../clean-css/lib/selectors/merge-adjacent.js | 35 +
.../lib/selectors/merge-media-queries.js | 64 +
.../selectors/merge-non-adjacent-by-body.js | 61 +
.../merge-non-adjacent-by-selector.js | 76 +
.../lib/selectors/reduce-non-adjacent.js | 172 +
.../remove-duplicate-media-queries.js | 21 +
.../lib/selectors/remove-duplicates.js | 41 +
.../clean-css/lib/selectors/reorderable.js | 99 +
.../clean-css/lib/selectors/restructure.js | 369 +
.../clean-css/lib/selectors/simple.js | 454 +
.../clean-css/lib/source-maps/track.js | 119 +
.../clean-css/lib/stringifier/helpers.js | 167 +
.../clean-css/lib/stringifier/one-time.js | 50 +
.../clean-css/lib/stringifier/simple.js | 22 +
.../clean-css/lib/stringifier/source-maps.js | 96 +
.../clean-css/lib/text/comments-processor.js | 131 +
.../clean-css/lib/text/escape-store.js | 53 +
.../lib/text/expressions-processor.js | 117 +
.../clean-css/lib/text/free-text-processor.js | 98 +
.../clean-css/lib/text/urls-processor.js | 75 +
.../lib/tokenizer/extract-properties.js | 193 +
.../lib/tokenizer/extract-selectors.js | 17 +
.../clean-css/lib/tokenizer/tokenize.js | 297 +
node_modules/clean-css/lib/urls/rebase.js | 30 +
node_modules/clean-css/lib/urls/reduce.js | 154 +
node_modules/clean-css/lib/urls/rewrite.js | 107 +
.../clean-css/lib/utils/clone-array.js | 12 +
.../clean-css/lib/utils/compatibility.js | 162 +
.../lib/utils/input-source-map-tracker.js | 284 +
node_modules/clean-css/lib/utils/object.js | 11 +
.../clean-css/lib/utils/quote-scanner.js | 119 +
.../clean-css/lib/utils/source-reader.js | 96 +
.../clean-css/lib/utils/source-tracker.js | 31 +
node_modules/clean-css/lib/utils/split.js | 62 +
.../node_modules/commander/History.md | 256 +
.../clean-css/node_modules/commander/LICENSE | 22 +
.../node_modules/commander/Readme.md | 342 +
.../clean-css/node_modules/commander/index.js | 1103 +
.../node_modules/commander/package.json | 108 +
node_modules/clean-css/package.json | 123 +
node_modules/cli-color/.lint | 13 +
node_modules/cli-color/.npmignore | 4 +
node_modules/cli-color/.travis.yml | 16 +
node_modules/cli-color/CHANGES | 105 +
node_modules/cli-color/LICENSE | 21 +
node_modules/cli-color/README.md | 691 +
node_modules/cli-color/art.js | 13 +
node_modules/cli-color/bare.js | 71 +
node_modules/cli-color/beep.js | 3 +
.../cli-color/bin/generate-color-images | 18 +
node_modules/cli-color/columns.js | 30 +
node_modules/cli-color/erase.js | 10 +
node_modules/cli-color/examples/art.js | 8 +
node_modules/cli-color/examples/basic.js | 25 +
node_modules/cli-color/examples/erase.js | 25 +
node_modules/cli-color/examples/styles.js | 10 +
node_modules/cli-color/examples/throbber.js | 15 +
node_modules/cli-color/examples/xterm.js | 6 +
node_modules/cli-color/get-stripped-length.js | 10 +
node_modules/cli-color/index.js | 17 +
node_modules/cli-color/lib/sgr.js | 107 +
node_modules/cli-color/lib/xterm-colors.js | 53 +
node_modules/cli-color/lib/xterm-match.js | 40 +
node_modules/cli-color/move.js | 36 +
node_modules/cli-color/package.json | 108 +
node_modules/cli-color/reset.js | 3 +
node_modules/cli-color/slice.js | 140 +
node_modules/cli-color/strip.js | 8 +
.../test/__playground/throbber.formatted.js | 12 +
.../cli-color/test/__playground/throbber.js | 11 +
node_modules/cli-color/test/art.js | 28 +
node_modules/cli-color/test/bare.js | 284 +
node_modules/cli-color/test/beep.js | 3 +
node_modules/cli-color/test/columns.js | 32 +
node_modules/cli-color/test/erase.js | 6 +
.../cli-color/test/get-stripped-length.js | 16 +
node_modules/cli-color/test/index.js | 16 +
node_modules/cli-color/test/lib/sgr.js | 14 +
.../cli-color/test/lib/xterm-colors.js | 10 +
.../cli-color/test/lib/xterm-match.js | 9 +
node_modules/cli-color/test/move.js | 37 +
node_modules/cli-color/test/reset.js | 5 +
node_modules/cli-color/test/slice.js | 92 +
node_modules/cli-color/test/strip.js | 98 +
node_modules/cli-color/test/throbber.js | 45 +
node_modules/cli-color/test/visual.js | 124 +
node_modules/cli-color/test/window-size.js | 8 +
node_modules/cli-color/throbber.js | 50 +
node_modules/cli-color/window-size.js | 8 +
node_modules/cliui/.coveralls.yml | 1 +
node_modules/cliui/.npmignore | 2 +
node_modules/cliui/.travis.yml | 7 +
node_modules/cliui/LICENSE.txt | 14 +
node_modules/cliui/README.md | 104 +
node_modules/cliui/index.js | 273 +
.../cliui/node_modules/wordwrap/.npmignore | 1 +
.../node_modules/wordwrap/README.markdown | 70 +
.../node_modules/wordwrap/example/center.js | 10 +
.../node_modules/wordwrap/example/meat.js | 3 +
.../cliui/node_modules/wordwrap/index.js | 76 +
.../cliui/node_modules/wordwrap/package.json | 94 +
.../cliui/node_modules/wordwrap/test/break.js | 30 +
.../node_modules/wordwrap/test/idleness.txt | 63 +
.../cliui/node_modules/wordwrap/test/wrap.js | 31 +
node_modules/cliui/package.json | 122 +
node_modules/cliui/test/cliui.js | 349 +
node_modules/clone-stats/LICENSE.md | 21 +
node_modules/clone-stats/README.md | 17 +
node_modules/clone-stats/index.js | 13 +
node_modules/clone-stats/package.json | 90 +
node_modules/clone-stats/test.js | 36 +
node_modules/clone/.npmignore | 1 +
node_modules/clone/.travis.yml | 3 +
node_modules/clone/LICENSE | 18 +
node_modules/clone/README.md | 126 +
node_modules/clone/clone.js | 160 +
node_modules/clone/package.json | 167 +
node_modules/clone/test-apart-ctx.html | 22 +
node_modules/clone/test.html | 148 +
node_modules/clone/test.js | 372 +
node_modules/code-point-at/index.js | 32 +
node_modules/code-point-at/license | 21 +
node_modules/code-point-at/package.json | 106 +
node_modules/code-point-at/readme.md | 32 +
node_modules/commander/History.md | 222 +
node_modules/commander/Readme.md | 300 +
node_modules/commander/index.js | 1020 +
node_modules/commander/package.json | 106 +
node_modules/concat-map/.travis.yml | 4 +
node_modules/concat-map/LICENSE | 18 +
node_modules/concat-map/README.markdown | 62 +
node_modules/concat-map/example/map.js | 6 +
node_modules/concat-map/index.js | 13 +
node_modules/concat-map/package.json | 117 +
node_modules/concat-map/test/map.js | 39 +
node_modules/config-chain/.npmignore | 3 +
node_modules/config-chain/LICENCE | 22 +
node_modules/config-chain/index.js | 282 +
node_modules/config-chain/package.json | 98 +
node_modules/config-chain/readme.markdown | 237 +
node_modules/config-chain/test/broken.js | 10 +
node_modules/config-chain/test/broken.json | 21 +
node_modules/config-chain/test/chain-class.js | 100 +
node_modules/config-chain/test/env.js | 10 +
node_modules/config-chain/test/find-file.js | 13 +
node_modules/config-chain/test/get.js | 15 +
.../config-chain/test/ignore-unfound-file.js | 5 +
node_modules/config-chain/test/ini.js | 18 +
node_modules/config-chain/test/save.js | 59 +
node_modules/constantinople/.gitattributes | 22 +
node_modules/constantinople/.npmignore | 13 +
node_modules/constantinople/.travis.yml | 3 +
node_modules/constantinople/LICENSE | 19 +
node_modules/constantinople/README.md | 42 +
node_modules/constantinople/index.js | 100 +
node_modules/constantinople/package.json | 83 +
node_modules/constantinople/test/index.js | 71 +
node_modules/content-disposition/HISTORY.md | 50 +
node_modules/content-disposition/LICENSE | 22 +
node_modules/content-disposition/README.md | 141 +
node_modules/content-disposition/index.js | 445 +
node_modules/content-disposition/package.json | 110 +
node_modules/content-type/HISTORY.md | 14 +
node_modules/content-type/LICENSE | 22 +
node_modules/content-type/README.md | 92 +
node_modules/content-type/index.js | 216 +
node_modules/content-type/package.json | 105 +
node_modules/cookie-parser/HISTORY.md | 85 +
node_modules/cookie-parser/LICENSE | 23 +
node_modules/cookie-parser/README.md | 85 +
node_modules/cookie-parser/index.js | 181 +
node_modules/cookie-parser/package.json | 114 +
node_modules/cookie-signature/.npmignore | 4 +
node_modules/cookie-signature/History.md | 38 +
node_modules/cookie-signature/Readme.md | 42 +
node_modules/cookie-signature/index.js | 51 +
node_modules/cookie-signature/package.json | 93 +
node_modules/cookie/HISTORY.md | 118 +
node_modules/cookie/LICENSE | 24 +
node_modules/cookie/README.md | 220 +
node_modules/cookie/index.js | 195 +
node_modules/cookie/package.json | 107 +
node_modules/core-util-is/LICENSE | 19 +
node_modules/core-util-is/README.md | 3 +
node_modules/core-util-is/float.patch | 604 +
node_modules/core-util-is/lib/util.js | 107 +
node_modules/core-util-is/package.json | 97 +
node_modules/core-util-is/test.js | 68 +
node_modules/cross-env/CHANGELOG.md | 4 +
node_modules/cross-env/LICENSE | 20 +
node_modules/cross-env/README.md | 154 +
node_modules/cross-env/dist/bin/cross-env.js | 10 +
node_modules/cross-env/dist/command.js | 32 +
node_modules/cross-env/dist/index.js | 75 +
node_modules/cross-env/package.json | 157 +
node_modules/cross-spawn/CHANGELOG.md | 6 +
node_modules/cross-spawn/LICENSE | 19 +
node_modules/cross-spawn/README.md | 85 +
node_modules/cross-spawn/index.js | 59 +
node_modules/cross-spawn/lib/enoent.js | 73 +
node_modules/cross-spawn/lib/parse.js | 113 +
.../cross-spawn/lib/util/escapeArgument.js | 30 +
.../cross-spawn/lib/util/escapeCommand.js | 12 +
.../lib/util/hasEmptyArgumentBug.js | 18 +
.../cross-spawn/lib/util/readShebang.js | 37 +
.../cross-spawn/lib/util/resolveCommand.js | 31 +
node_modules/cross-spawn/package.json | 118 +
node_modules/css-parse/.npmignore | 6 +
node_modules/css-parse/History.md | 30 +
node_modules/css-parse/Makefile | 7 +
node_modules/css-parse/Readme.md | 62 +
node_modules/css-parse/component.json | 8 +
node_modules/css-parse/index.js | 265 +
node_modules/css-parse/package.json | 74 +
node_modules/css-stringify/.npmignore | 6 +
node_modules/css-stringify/History.md | 30 +
node_modules/css-stringify/Makefile | 7 +
node_modules/css-stringify/Readme.md | 33 +
node_modules/css-stringify/component.json | 8 +
node_modules/css-stringify/index.js | 182 +
node_modules/css-stringify/package.json | 75 +
node_modules/css/.npmignore | 4 +
node_modules/css/History.md | 20 +
node_modules/css/Makefile | 8 +
node_modules/css/Readme.md | 77 +
node_modules/css/benchmark.js | 36 +
node_modules/css/component.json | 13 +
node_modules/css/index.js | 3 +
node_modules/css/package.json | 74 +
node_modules/css/test.js | 6 +
node_modules/d/.lint | 11 +
node_modules/d/.npmignore | 4 +
node_modules/d/.travis.yml | 15 +
node_modules/d/CHANGES | 13 +
node_modules/d/LICENSE | 19 +
node_modules/d/README.md | 104 +
node_modules/d/auto-bind.js | 32 +
node_modules/d/index.js | 63 +
node_modules/d/lazy.js | 117 +
node_modules/d/package.json | 103 +
node_modules/d/test/auto-bind.js | 12 +
node_modules/d/test/index.js | 182 +
node_modules/d/test/lazy.js | 82 +
node_modules/dateformat/.npmignore | 2 +
node_modules/dateformat/LICENSE | 20 +
node_modules/dateformat/Readme.md | 135 +
node_modules/dateformat/lib/dateformat.js | 226 +
node_modules/dateformat/package.json | 114 +
node_modules/debug/.coveralls.yml | 1 +
node_modules/debug/.eslintrc | 11 +
node_modules/debug/.npmignore | 9 +
node_modules/debug/.travis.yml | 14 +
node_modules/debug/CHANGELOG.md | 337 +
node_modules/debug/LICENSE | 19 +
node_modules/debug/Makefile | 50 +
node_modules/debug/README.md | 312 +
node_modules/debug/component.json | 19 +
node_modules/debug/karma.conf.js | 70 +
node_modules/debug/node.js | 1 +
node_modules/debug/node_modules/ms/index.js | 149 +
node_modules/debug/node_modules/ms/license.md | 21 +
.../debug/node_modules/ms/package.json | 108 +
node_modules/debug/node_modules/ms/readme.md | 52 +
node_modules/debug/package.json | 124 +
node_modules/debug/src/browser.js | 185 +
node_modules/debug/src/debug.js | 202 +
node_modules/debug/src/index.js | 10 +
node_modules/debug/src/node.js | 241 +
node_modules/decamelize/index.js | 13 +
node_modules/decamelize/license | 21 +
node_modules/decamelize/package.json | 106 +
node_modules/decamelize/readme.md | 48 +
node_modules/defaults/.npmignore | 1 +
node_modules/defaults/LICENSE | 21 +
node_modules/defaults/README.md | 43 +
node_modules/defaults/index.js | 13 +
node_modules/defaults/package.json | 88 +
node_modules/defaults/test.js | 34 +
node_modules/depd/History.md | 84 +
node_modules/depd/LICENSE | 22 +
node_modules/depd/Readme.md | 281 +
node_modules/depd/index.js | 521 +
node_modules/depd/lib/browser/index.js | 79 +
node_modules/depd/lib/compat/buffer-concat.js | 35 +
.../depd/lib/compat/callsite-tostring.js | 103 +
.../depd/lib/compat/event-listener-count.js | 22 +
node_modules/depd/lib/compat/index.js | 84 +
node_modules/depd/package.json | 104 +
node_modules/deprecated/.npmignore | 6 +
node_modules/deprecated/.travis.yml | 6 +
node_modules/deprecated/LICENSE | 20 +
node_modules/deprecated/README.md | 51 +
node_modules/deprecated/index.js | 39 +
node_modules/deprecated/package.json | 96 +
node_modules/deprecated/test/field.js | 44 +
node_modules/deprecated/test/method.js | 32 +
node_modules/destroy/LICENSE | 22 +
node_modules/destroy/README.md | 60 +
node_modules/destroy/index.js | 75 +
node_modules/destroy/package.json | 106 +
node_modules/detect-file/LICENSE | 21 +
node_modules/detect-file/README.md | 90 +
node_modules/detect-file/index.js | 110 +
node_modules/detect-file/package.json | 111 +
node_modules/dottie/.npmignore | 1 +
node_modules/dottie/.travis.yml | 5 +
node_modules/dottie/LICENSE | 23 +
node_modules/dottie/README.md | 107 +
node_modules/dottie/dottie.js | 242 +
node_modules/dottie/package.json | 82 +
node_modules/dottie/test/find.test.js | 19 +
node_modules/dottie/test/flatten.test.js | 40 +
node_modules/dottie/test/get.test.js | 106 +
node_modules/dottie/test/paths.test.js | 26 +
node_modules/dottie/test/set.test.js | 48 +
node_modules/dottie/test/transform.test.js | 148 +
node_modules/duplexer2/.npmignore | 1 +
node_modules/duplexer2/.travis.yml | 3 +
node_modules/duplexer2/LICENSE.md | 26 +
node_modules/duplexer2/README.md | 129 +
node_modules/duplexer2/example.js | 49 +
node_modules/duplexer2/index.js | 62 +
node_modules/duplexer2/package.json | 90 +
node_modules/duplexer2/test/tests.js | 161 +
node_modules/editorconfig/.editorconfig | 14 +
node_modules/editorconfig/.gitattributes | 2 +
node_modules/editorconfig/.gitmodules | 3 +
node_modules/editorconfig/.npmignore | 12 +
node_modules/editorconfig/.travis.yml | 18 +
node_modules/editorconfig/CMakeLists.txt | 16 +
node_modules/editorconfig/LICENSE | 19 +
node_modules/editorconfig/README.md | 198 +
node_modules/editorconfig/bin/editorconfig | 42 +
node_modules/editorconfig/editorconfig.js | 237 +
node_modules/editorconfig/lib/fnmatch.js | 1080 +
node_modules/editorconfig/lib/ini.js | 65 +
node_modules/editorconfig/lib/version.js | 48 +
.../node_modules/commander/History.md | 261 +
.../node_modules/commander/LICENSE | 22 +
.../node_modules/commander/Readme.md | 351 +
.../node_modules/commander/index.js | 1110 +
.../node_modules/commander/package.json | 104 +
.../node_modules/lru-cache/.npmignore | 1 +
.../node_modules/lru-cache/.travis.yml | 8 +
.../node_modules/lru-cache/CONTRIBUTORS | 14 +
.../node_modules/lru-cache/LICENSE | 15 +
.../node_modules/lru-cache/README.md | 132 +
.../node_modules/lru-cache/lib/lru-cache.js | 356 +
.../node_modules/lru-cache/package.json | 94 +
.../node_modules/lru-cache/test/basic.js | 427 +
.../node_modules/lru-cache/test/foreach.js | 130 +
.../lru-cache/test/memory-leak.js | 51 +
.../node_modules/lru-cache/test/overflow.js | 45 +
.../node_modules/lru-cache/test/serialize.js | 224 +
node_modules/editorconfig/package.json | 124 +
node_modules/editorconfig/test/app.js | 0
node_modules/editorconfig/test/index.js | 84 +
node_modules/ee-first/LICENSE | 22 +
node_modules/ee-first/README.md | 80 +
node_modules/ee-first/index.js | 95 +
node_modules/ee-first/package.json | 98 +
node_modules/encodeurl/HISTORY.md | 9 +
node_modules/encodeurl/LICENSE | 22 +
node_modules/encodeurl/README.md | 124 +
node_modules/encodeurl/index.js | 60 +
node_modules/encodeurl/package.json | 111 +
node_modules/end-of-stream/.npmignore | 1 +
node_modules/end-of-stream/README.md | 47 +
node_modules/end-of-stream/index.js | 61 +
node_modules/end-of-stream/package.json | 89 +
node_modules/end-of-stream/test.js | 59 +
node_modules/error-ex/LICENSE | 21 +
node_modules/error-ex/README.md | 144 +
node_modules/error-ex/index.js | 133 +
node_modules/error-ex/package.json | 113 +
node_modules/es5-ext/.lint | 39 +
node_modules/es5-ext/.lintignore | 9 +
node_modules/es5-ext/.npmignore | 4 +
node_modules/es5-ext/.travis.yml | 16 +
node_modules/es5-ext/CHANGES | 646 +
node_modules/es5-ext/LICENSE | 21 +
node_modules/es5-ext/README.md | 993 +
.../es5-ext/array/#/@@iterator/implement.js | 6 +
.../es5-ext/array/#/@@iterator/index.js | 4 +
.../array/#/@@iterator/is-implemented.js | 16 +
.../es5-ext/array/#/@@iterator/shim.js | 3 +
.../es5-ext/array/#/_compare-by-length.js | 9 +
node_modules/es5-ext/array/#/binary-search.js | 28 +
node_modules/es5-ext/array/#/clear.js | 12 +
node_modules/es5-ext/array/#/compact.js | 9 +
.../es5-ext/array/#/concat/implement.js | 6 +
node_modules/es5-ext/array/#/concat/index.js | 4 +
.../es5-ext/array/#/concat/is-implemented.js | 7 +
node_modules/es5-ext/array/#/concat/shim.js | 44 +
node_modules/es5-ext/array/#/contains.js | 7 +
.../es5-ext/array/#/copy-within/implement.js | 7 +
.../es5-ext/array/#/copy-within/index.js | 4 +
.../array/#/copy-within/is-implemented.js | 7 +
.../es5-ext/array/#/copy-within/shim.js | 39 +
node_modules/es5-ext/array/#/diff.js | 13 +
node_modules/es5-ext/array/#/e-index-of.js | 29 +
.../es5-ext/array/#/e-last-index-of.js | 29 +
.../es5-ext/array/#/entries/implement.js | 6 +
node_modules/es5-ext/array/#/entries/index.js | 4 +
.../es5-ext/array/#/entries/is-implemented.js | 15 +
node_modules/es5-ext/array/#/entries/shim.js | 4 +
node_modules/es5-ext/array/#/exclusion.js | 27 +
.../es5-ext/array/#/fill/implement.js | 6 +
node_modules/es5-ext/array/#/fill/index.js | 4 +
.../es5-ext/array/#/fill/is-implemented.js | 7 +
node_modules/es5-ext/array/#/fill/shim.js | 21 +
.../es5-ext/array/#/filter/implement.js | 6 +
node_modules/es5-ext/array/#/filter/index.js | 4 +
.../es5-ext/array/#/filter/is-implemented.js | 9 +
node_modules/es5-ext/array/#/filter/shim.js | 22 +
.../es5-ext/array/#/find-index/implement.js | 7 +
.../es5-ext/array/#/find-index/index.js | 4 +
.../array/#/find-index/is-implemented.js | 9 +
.../es5-ext/array/#/find-index/shim.js | 20 +
.../es5-ext/array/#/find/implement.js | 6 +
node_modules/es5-ext/array/#/find/index.js | 4 +
.../es5-ext/array/#/find/is-implemented.js | 9 +
node_modules/es5-ext/array/#/find/shim.js | 8 +
node_modules/es5-ext/array/#/first-index.js | 16 +
node_modules/es5-ext/array/#/first.js | 9 +
node_modules/es5-ext/array/#/flatten.js | 39 +
.../es5-ext/array/#/for-each-right.js | 20 +
node_modules/es5-ext/array/#/group.js | 23 +
node_modules/es5-ext/array/#/index.js | 40 +
node_modules/es5-ext/array/#/indexes-of.js | 12 +
node_modules/es5-ext/array/#/intersection.js | 19 +
node_modules/es5-ext/array/#/is-copy.js | 21 +
node_modules/es5-ext/array/#/is-uniq.js | 12 +
.../es5-ext/array/#/keys/implement.js | 6 +
node_modules/es5-ext/array/#/keys/index.js | 4 +
.../es5-ext/array/#/keys/is-implemented.js | 14 +
node_modules/es5-ext/array/#/keys/shim.js | 4 +
node_modules/es5-ext/array/#/last-index.js | 16 +
node_modules/es5-ext/array/#/last.js | 9 +
node_modules/es5-ext/array/#/map/implement.js | 6 +
node_modules/es5-ext/array/#/map/index.js | 4 +
.../es5-ext/array/#/map/is-implemented.js | 8 +
node_modules/es5-ext/array/#/map/shim.js | 21 +
node_modules/es5-ext/array/#/remove.js | 12 +
node_modules/es5-ext/array/#/separate.js | 10 +
.../es5-ext/array/#/slice/implement.js | 6 +
node_modules/es5-ext/array/#/slice/index.js | 4 +
.../es5-ext/array/#/slice/is-implemented.js | 7 +
node_modules/es5-ext/array/#/slice/shim.js | 35 +
node_modules/es5-ext/array/#/some-right.js | 23 +
.../es5-ext/array/#/splice/implement.js | 6 +
node_modules/es5-ext/array/#/splice/index.js | 4 +
.../es5-ext/array/#/splice/is-implemented.js | 7 +
node_modules/es5-ext/array/#/splice/shim.js | 14 +
node_modules/es5-ext/array/#/uniq.js | 13 +
.../es5-ext/array/#/values/implement.js | 6 +
node_modules/es5-ext/array/#/values/index.js | 3 +
.../es5-ext/array/#/values/is-implemented.js | 14 +
node_modules/es5-ext/array/#/values/shim.js | 4 +
node_modules/es5-ext/array/_is-extensible.js | 13 +
.../es5-ext/array/_sub-array-dummy-safe.js | 23 +
.../es5-ext/array/_sub-array-dummy.js | 16 +
node_modules/es5-ext/array/from/implement.js | 6 +
node_modules/es5-ext/array/from/index.js | 5 +
.../es5-ext/array/from/is-implemented.js | 9 +
node_modules/es5-ext/array/from/shim.js | 106 +
node_modules/es5-ext/array/generate.js | 20 +
node_modules/es5-ext/array/index.js | 11 +
node_modules/es5-ext/array/is-plain-array.js | 11 +
node_modules/es5-ext/array/of/implement.js | 6 +
node_modules/es5-ext/array/of/index.js | 5 +
.../es5-ext/array/of/is-implemented.js | 8 +
node_modules/es5-ext/array/of/shim.js | 19 +
node_modules/es5-ext/array/to-array.js | 9 +
node_modules/es5-ext/array/valid-array.js | 8 +
node_modules/es5-ext/boolean/index.js | 5 +
node_modules/es5-ext/boolean/is-boolean.js | 10 +
node_modules/es5-ext/date/#/copy.js | 5 +
node_modules/es5-ext/date/#/days-in-month.js | 17 +
node_modules/es5-ext/date/#/floor-day.js | 8 +
node_modules/es5-ext/date/#/floor-month.js | 8 +
node_modules/es5-ext/date/#/floor-year.js | 8 +
node_modules/es5-ext/date/#/format.js | 21 +
node_modules/es5-ext/date/#/index.js | 10 +
node_modules/es5-ext/date/index.js | 7 +
node_modules/es5-ext/date/is-date.js | 9 +
node_modules/es5-ext/date/valid-date.js | 8 +
node_modules/es5-ext/error/#/index.js | 5 +
node_modules/es5-ext/error/#/throw.js | 5 +
node_modules/es5-ext/error/custom.js | 19 +
node_modules/es5-ext/error/index.js | 8 +
node_modules/es5-ext/error/is-error.js | 9 +
node_modules/es5-ext/error/valid-error.js | 8 +
node_modules/es5-ext/function/#/compose.js | 20 +
node_modules/es5-ext/function/#/copy.js | 15 +
node_modules/es5-ext/function/#/curry.js | 24 +
node_modules/es5-ext/function/#/index.js | 12 +
node_modules/es5-ext/function/#/lock.js | 12 +
node_modules/es5-ext/function/#/not.js | 14 +
node_modules/es5-ext/function/#/partial.js | 16 +
node_modules/es5-ext/function/#/spread.js | 10 +
.../es5-ext/function/#/to-string-tokens.js | 11 +
.../es5-ext/function/_define-length.js | 44 +
node_modules/es5-ext/function/constant.js | 5 +
node_modules/es5-ext/function/identity.js | 3 +
node_modules/es5-ext/function/index.js | 15 +
node_modules/es5-ext/function/invoke.js | 15 +
node_modules/es5-ext/function/is-arguments.js | 7 +
node_modules/es5-ext/function/is-function.js | 9 +
node_modules/es5-ext/function/noop.js | 3 +
node_modules/es5-ext/function/pluck.js | 7 +
.../es5-ext/function/valid-function.js | 8 +
node_modules/es5-ext/global.js | 3 +
node_modules/es5-ext/index.js | 18 +
node_modules/es5-ext/iterable/for-each.js | 12 +
node_modules/es5-ext/iterable/index.js | 8 +
node_modules/es5-ext/iterable/is.js | 10 +
.../es5-ext/iterable/validate-object.js | 9 +
node_modules/es5-ext/iterable/validate.js | 8 +
node_modules/es5-ext/json/index.js | 5 +
node_modules/es5-ext/json/safe-stringify.js | 26 +
node_modules/es5-ext/math/_pack-ieee754.js | 82 +
node_modules/es5-ext/math/_unpack-ieee754.js | 33 +
node_modules/es5-ext/math/acosh/implement.js | 6 +
node_modules/es5-ext/math/acosh/index.js | 5 +
.../es5-ext/math/acosh/is-implemented.js | 7 +
node_modules/es5-ext/math/acosh/shim.js | 12 +
node_modules/es5-ext/math/asinh/implement.js | 6 +
node_modules/es5-ext/math/asinh/index.js | 5 +
.../es5-ext/math/asinh/is-implemented.js | 7 +
node_modules/es5-ext/math/asinh/shim.js | 15 +
node_modules/es5-ext/math/atanh/implement.js | 6 +
node_modules/es5-ext/math/atanh/index.js | 5 +
.../es5-ext/math/atanh/is-implemented.js | 7 +
node_modules/es5-ext/math/atanh/shim.js | 14 +
node_modules/es5-ext/math/cbrt/implement.js | 6 +
node_modules/es5-ext/math/cbrt/index.js | 5 +
.../es5-ext/math/cbrt/is-implemented.js | 7 +
node_modules/es5-ext/math/cbrt/shim.js | 12 +
node_modules/es5-ext/math/clz32/implement.js | 6 +
node_modules/es5-ext/math/clz32/index.js | 5 +
.../es5-ext/math/clz32/is-implemented.js | 7 +
node_modules/es5-ext/math/clz32/shim.js | 6 +
node_modules/es5-ext/math/cosh/implement.js | 6 +
node_modules/es5-ext/math/cosh/index.js | 5 +
.../es5-ext/math/cosh/is-implemented.js | 7 +
node_modules/es5-ext/math/cosh/shim.js | 11 +
node_modules/es5-ext/math/expm1/implement.js | 6 +
node_modules/es5-ext/math/expm1/index.js | 5 +
.../es5-ext/math/expm1/is-implemented.js | 7 +
node_modules/es5-ext/math/expm1/shim.js | 16 +
node_modules/es5-ext/math/fround/implement.js | 6 +
node_modules/es5-ext/math/fround/index.js | 5 +
.../es5-ext/math/fround/is-implemented.js | 7 +
node_modules/es5-ext/math/fround/shim.js | 33 +
node_modules/es5-ext/math/hypot/implement.js | 6 +
node_modules/es5-ext/math/hypot/index.js | 5 +
.../es5-ext/math/hypot/is-implemented.js | 7 +
node_modules/es5-ext/math/hypot/shim.js | 34 +
node_modules/es5-ext/math/imul/implement.js | 6 +
node_modules/es5-ext/math/imul/index.js | 5 +
.../es5-ext/math/imul/is-implemented.js | 7 +
node_modules/es5-ext/math/imul/shim.js | 13 +
node_modules/es5-ext/math/index.js | 21 +
node_modules/es5-ext/math/log10/implement.js | 6 +
node_modules/es5-ext/math/log10/index.js | 5 +
.../es5-ext/math/log10/is-implemented.js | 7 +
node_modules/es5-ext/math/log10/shim.js | 14 +
node_modules/es5-ext/math/log1p/implement.js | 6 +
node_modules/es5-ext/math/log1p/index.js | 5 +
.../es5-ext/math/log1p/is-implemented.js | 7 +
node_modules/es5-ext/math/log1p/shim.js | 17 +
node_modules/es5-ext/math/log2/implement.js | 6 +
node_modules/es5-ext/math/log2/index.js | 5 +
.../es5-ext/math/log2/is-implemented.js | 7 +
node_modules/es5-ext/math/log2/shim.js | 14 +
node_modules/es5-ext/math/sign/implement.js | 6 +
node_modules/es5-ext/math/sign/index.js | 5 +
.../es5-ext/math/sign/is-implemented.js | 7 +
node_modules/es5-ext/math/sign/shim.js | 7 +
node_modules/es5-ext/math/sinh/implement.js | 6 +
node_modules/es5-ext/math/sinh/index.js | 5 +
.../es5-ext/math/sinh/is-implemented.js | 7 +
node_modules/es5-ext/math/sinh/shim.js | 17 +
node_modules/es5-ext/math/tanh/implement.js | 6 +
node_modules/es5-ext/math/tanh/index.js | 5 +
.../es5-ext/math/tanh/is-implemented.js | 7 +
node_modules/es5-ext/math/tanh/shim.js | 17 +
node_modules/es5-ext/math/trunc/implement.js | 6 +
node_modules/es5-ext/math/trunc/index.js | 5 +
.../es5-ext/math/trunc/is-implemented.js | 7 +
node_modules/es5-ext/math/trunc/shim.js | 13 +
node_modules/es5-ext/number/#/index.js | 5 +
node_modules/es5-ext/number/#/pad.js | 15 +
.../es5-ext/number/epsilon/implement.js | 6 +
node_modules/es5-ext/number/epsilon/index.js | 3 +
.../es5-ext/number/epsilon/is-implemented.js | 5 +
node_modules/es5-ext/number/index.js | 17 +
.../es5-ext/number/is-finite/implement.js | 6 +
.../es5-ext/number/is-finite/index.js | 5 +
.../number/is-finite/is-implemented.js | 7 +
node_modules/es5-ext/number/is-finite/shim.js | 5 +
.../es5-ext/number/is-integer/implement.js | 6 +
.../es5-ext/number/is-integer/index.js | 5 +
.../number/is-integer/is-implemented.js | 7 +
.../es5-ext/number/is-integer/shim.js | 8 +
.../es5-ext/number/is-nan/implement.js | 6 +
node_modules/es5-ext/number/is-nan/index.js | 5 +
.../es5-ext/number/is-nan/is-implemented.js | 7 +
node_modules/es5-ext/number/is-nan/shim.js | 3 +
node_modules/es5-ext/number/is-natural.js | 5 +
node_modules/es5-ext/number/is-number.js | 11 +
.../number/is-safe-integer/implement.js | 6 +
.../es5-ext/number/is-safe-integer/index.js | 5 +
.../number/is-safe-integer/is-implemented.js | 8 +
.../es5-ext/number/is-safe-integer/shim.js | 11 +
.../number/max-safe-integer/implement.js | 6 +
.../es5-ext/number/max-safe-integer/index.js | 3 +
.../number/max-safe-integer/is-implemented.js | 5 +
.../number/min-safe-integer/implement.js | 6 +
.../es5-ext/number/min-safe-integer/index.js | 3 +
.../number/min-safe-integer/is-implemented.js | 5 +
node_modules/es5-ext/number/to-integer.js | 12 +
node_modules/es5-ext/number/to-pos-integer.js | 7 +
node_modules/es5-ext/number/to-uint32.js | 3 +
node_modules/es5-ext/object/_iterate.js | 29 +
.../es5-ext/object/assign/implement.js | 6 +
node_modules/es5-ext/object/assign/index.js | 5 +
.../es5-ext/object/assign/is-implemented.js | 9 +
node_modules/es5-ext/object/assign/shim.js | 22 +
node_modules/es5-ext/object/clear.js | 16 +
node_modules/es5-ext/object/compact.js | 7 +
node_modules/es5-ext/object/compare.js | 42 +
node_modules/es5-ext/object/copy-deep.js | 38 +
node_modules/es5-ext/object/copy.js | 10 +
node_modules/es5-ext/object/count.js | 5 +
node_modules/es5-ext/object/create.js | 36 +
.../object/ensure-natural-number-value.js | 8 +
.../es5-ext/object/ensure-natural-number.js | 9 +
node_modules/es5-ext/object/eq.js | 5 +
node_modules/es5-ext/object/every.js | 3 +
node_modules/es5-ext/object/filter.js | 15 +
node_modules/es5-ext/object/find-key.js | 3 +
node_modules/es5-ext/object/find.js | 8 +
node_modules/es5-ext/object/first-key.js | 14 +
node_modules/es5-ext/object/flatten.js | 17 +
node_modules/es5-ext/object/for-each.js | 3 +
.../es5-ext/object/get-property-names.js | 18 +
node_modules/es5-ext/object/index.js | 54 +
node_modules/es5-ext/object/is-array-like.js | 14 +
node_modules/es5-ext/object/is-callable.js | 5 +
node_modules/es5-ext/object/is-copy-deep.js | 58 +
node_modules/es5-ext/object/is-copy.js | 24 +
node_modules/es5-ext/object/is-empty.js | 14 +
.../es5-ext/object/is-number-value.js | 3 +
node_modules/es5-ext/object/is-object.js | 7 +
.../es5-ext/object/is-plain-object.js | 20 +
node_modules/es5-ext/object/is-value.js | 5 +
node_modules/es5-ext/object/is.js | 10 +
node_modules/es5-ext/object/key-of.js | 15 +
node_modules/es5-ext/object/keys/implement.js | 6 +
node_modules/es5-ext/object/keys/index.js | 5 +
.../es5-ext/object/keys/is-implemented.js | 8 +
node_modules/es5-ext/object/keys/shim.js | 7 +
node_modules/es5-ext/object/map-keys.js | 15 +
node_modules/es5-ext/object/map.js | 15 +
.../es5-ext/object/mixin-prototypes.js | 34 +
node_modules/es5-ext/object/mixin.js | 27 +
.../es5-ext/object/normalize-options.js | 17 +
node_modules/es5-ext/object/primitive-set.js | 9 +
node_modules/es5-ext/object/safe-traverse.js | 15 +
node_modules/es5-ext/object/serialize.js | 36 +
.../object/set-prototype-of/implement.js | 8 +
.../es5-ext/object/set-prototype-of/index.js | 5 +
.../object/set-prototype-of/is-implemented.js | 11 +
.../es5-ext/object/set-prototype-of/shim.js | 73 +
node_modules/es5-ext/object/some.js | 3 +
node_modules/es5-ext/object/to-array.js | 18 +
node_modules/es5-ext/object/unserialize.js | 7 +
node_modules/es5-ext/object/valid-callable.js | 6 +
node_modules/es5-ext/object/valid-object.js | 8 +
node_modules/es5-ext/object/valid-value.js | 6 +
.../object/validate-array-like-object.js | 9 +
.../es5-ext/object/validate-array-like.js | 8 +
.../object/validate-stringifiable-value.js | 6 +
.../es5-ext/object/validate-stringifiable.js | 9 +
node_modules/es5-ext/package.json | 119 +
node_modules/es5-ext/reg-exp/#/index.js | 10 +
node_modules/es5-ext/reg-exp/#/is-sticky.js | 9 +
node_modules/es5-ext/reg-exp/#/is-unicode.js | 9 +
.../es5-ext/reg-exp/#/match/implement.js | 6 +
node_modules/es5-ext/reg-exp/#/match/index.js | 5 +
.../es5-ext/reg-exp/#/match/is-implemented.js | 8 +
node_modules/es5-ext/reg-exp/#/match/shim.js | 8 +
.../es5-ext/reg-exp/#/replace/implement.js | 6 +
.../es5-ext/reg-exp/#/replace/index.js | 5 +
.../reg-exp/#/replace/is-implemented.js | 8 +
.../es5-ext/reg-exp/#/replace/shim.js | 8 +
.../es5-ext/reg-exp/#/search/implement.js | 6 +
.../es5-ext/reg-exp/#/search/index.js | 5 +
.../reg-exp/#/search/is-implemented.js | 8 +
node_modules/es5-ext/reg-exp/#/search/shim.js | 8 +
.../es5-ext/reg-exp/#/split/implement.js | 6 +
node_modules/es5-ext/reg-exp/#/split/index.js | 5 +
.../es5-ext/reg-exp/#/split/is-implemented.js | 8 +
node_modules/es5-ext/reg-exp/#/split/shim.js | 8 +
.../es5-ext/reg-exp/#/sticky/implement.js | 8 +
.../reg-exp/#/sticky/is-implemented.js | 10 +
.../es5-ext/reg-exp/#/unicode/implement.js | 8 +
.../reg-exp/#/unicode/is-implemented.js | 10 +
node_modules/es5-ext/reg-exp/escape.js | 9 +
node_modules/es5-ext/reg-exp/index.js | 8 +
node_modules/es5-ext/reg-exp/is-reg-exp.js | 9 +
node_modules/es5-ext/reg-exp/valid-reg-exp.js | 8 +
.../es5-ext/string/#/@@iterator/implement.js | 6 +
.../es5-ext/string/#/@@iterator/index.js | 4 +
.../string/#/@@iterator/is-implemented.js | 16 +
.../es5-ext/string/#/@@iterator/shim.js | 6 +
node_modules/es5-ext/string/#/at.js | 33 +
.../es5-ext/string/#/camel-to-hyphen.js | 10 +
node_modules/es5-ext/string/#/capitalize.js | 8 +
.../string/#/case-insensitive-compare.js | 7 +
.../string/#/code-point-at/implement.js | 7 +
.../es5-ext/string/#/code-point-at/index.js | 5 +
.../string/#/code-point-at/is-implemented.js | 8 +
.../es5-ext/string/#/code-point-at/shim.js | 26 +
.../es5-ext/string/#/contains/implement.js | 7 +
.../es5-ext/string/#/contains/index.js | 5 +
.../string/#/contains/is-implemented.js | 8 +
.../es5-ext/string/#/contains/shim.js | 7 +
.../es5-ext/string/#/ends-with/implement.js | 7 +
.../es5-ext/string/#/ends-with/index.js | 5 +
.../string/#/ends-with/is-implemented.js | 8 +
.../es5-ext/string/#/ends-with/shim.js | 16 +
.../es5-ext/string/#/hyphen-to-camel.js | 8 +
node_modules/es5-ext/string/#/indent.js | 12 +
node_modules/es5-ext/string/#/index.js | 22 +
node_modules/es5-ext/string/#/last.js | 8 +
.../es5-ext/string/#/normalize/_data.js | 69 +
.../es5-ext/string/#/normalize/implement.js | 7 +
.../es5-ext/string/#/normalize/index.js | 5 +
.../string/#/normalize/is-implemented.js | 8 +
.../es5-ext/string/#/normalize/shim.js | 289 +
node_modules/es5-ext/string/#/pad.js | 18 +
.../es5-ext/string/#/plain-replace-all.js | 16 +
.../es5-ext/string/#/plain-replace.js | 10 +
.../es5-ext/string/#/repeat/implement.js | 7 +
node_modules/es5-ext/string/#/repeat/index.js | 5 +
.../es5-ext/string/#/repeat/is-implemented.js | 8 +
node_modules/es5-ext/string/#/repeat/shim.js | 22 +
.../es5-ext/string/#/starts-with/implement.js | 7 +
.../es5-ext/string/#/starts-with/index.js | 5 +
.../string/#/starts-with/is-implemented.js | 9 +
.../es5-ext/string/#/starts-with/shim.js | 12 +
node_modules/es5-ext/string/#/uncapitalize.js | 8 +
node_modules/es5-ext/string/format-method.js | 24 +
.../string/from-code-point/implement.js | 6 +
.../es5-ext/string/from-code-point/index.js | 5 +
.../string/from-code-point/is-implemented.js | 7 +
.../es5-ext/string/from-code-point/shim.js | 30 +
node_modules/es5-ext/string/index.js | 10 +
node_modules/es5-ext/string/is-string.js | 10 +
node_modules/es5-ext/string/random-uniq.js | 11 +
node_modules/es5-ext/string/raw/implement.js | 6 +
node_modules/es5-ext/string/raw/index.js | 5 +
.../es5-ext/string/raw/is-implemented.js | 9 +
node_modules/es5-ext/string/raw/shim.js | 15 +
node_modules/es5-ext/test/__tad.js | 3 +
.../test/array/#/@@iterator/implement.js | 5 +
.../es5-ext/test/array/#/@@iterator/index.js | 3 +
.../test/array/#/@@iterator/is-implemented.js | 3 +
.../es5-ext/test/array/#/@@iterator/shim.js | 9 +
.../test/array/#/_compare-by-length.js | 7 +
.../es5-ext/test/array/#/binary-search.js | 15 +
node_modules/es5-ext/test/array/#/clear.js | 7 +
node_modules/es5-ext/test/array/#/compact.js | 17 +
.../es5-ext/test/array/#/concat/implement.js | 5 +
.../es5-ext/test/array/#/concat/index.js | 3 +
.../test/array/#/concat/is-implemented.js | 3 +
.../es5-ext/test/array/#/concat/shim.js | 26 +
node_modules/es5-ext/test/array/#/contains.js | 21 +
.../test/array/#/copy-within/implement.js | 5 +
.../es5-ext/test/array/#/copy-within/index.js | 3 +
.../array/#/copy-within/is-implemented.js | 3 +
.../es5-ext/test/array/#/copy-within/shim.js | 29 +
node_modules/es5-ext/test/array/#/diff.js | 17 +
.../es5-ext/test/array/#/e-index-of.js | 13 +
.../es5-ext/test/array/#/e-last-index-of.js | 12 +
.../es5-ext/test/array/#/entries/implement.js | 5 +
.../es5-ext/test/array/#/entries/index.js | 3 +
.../test/array/#/entries/is-implemented.js | 3 +
.../es5-ext/test/array/#/entries/shim.js | 9 +
.../es5-ext/test/array/#/exclusion.js | 15 +
.../es5-ext/test/array/#/fill/implement.js | 5 +
.../es5-ext/test/array/#/fill/index.js | 3 +
.../test/array/#/fill/is-implemented.js | 3 +
.../es5-ext/test/array/#/fill/shim.js | 18 +
.../es5-ext/test/array/#/filter/implement.js | 5 +
.../es5-ext/test/array/#/filter/index.js | 3 +
.../test/array/#/filter/is-implemented.js | 3 +
.../es5-ext/test/array/#/filter/shim.js | 17 +
.../test/array/#/find-index/implement.js | 5 +
.../es5-ext/test/array/#/find-index/index.js | 3 +
.../test/array/#/find-index/is-implemented.js | 3 +
.../es5-ext/test/array/#/find-index/shim.js | 17 +
.../es5-ext/test/array/#/find/implement.js | 5 +
.../es5-ext/test/array/#/find/index.js | 3 +
.../test/array/#/find/is-implemented.js | 3 +
.../es5-ext/test/array/#/find/shim.js | 17 +
.../es5-ext/test/array/#/first-index.js | 17 +
node_modules/es5-ext/test/array/#/first.js | 13 +
node_modules/es5-ext/test/array/#/flatten.js | 14 +
.../es5-ext/test/array/#/for-each-right.js | 36 +
node_modules/es5-ext/test/array/#/group.js | 24 +
.../es5-ext/test/array/#/indexes-of.js | 14 +
.../es5-ext/test/array/#/intersection.js | 24 +
node_modules/es5-ext/test/array/#/is-copy.js | 13 +
node_modules/es5-ext/test/array/#/is-uniq.js | 11 +
.../es5-ext/test/array/#/keys/implement.js | 5 +
.../es5-ext/test/array/#/keys/index.js | 3 +
.../test/array/#/keys/is-implemented.js | 3 +
.../es5-ext/test/array/#/keys/shim.js | 9 +
.../es5-ext/test/array/#/last-index.js | 17 +
node_modules/es5-ext/test/array/#/last.js | 15 +
.../es5-ext/test/array/#/map/implement.js | 5 +
.../es5-ext/test/array/#/map/index.js | 3 +
.../test/array/#/map/is-implemented.js | 3 +
node_modules/es5-ext/test/array/#/map/shim.js | 19 +
node_modules/es5-ext/test/array/#/remove.js | 14 +
node_modules/es5-ext/test/array/#/separate.js | 15 +
.../es5-ext/test/array/#/slice/implement.js | 5 +
.../es5-ext/test/array/#/slice/index.js | 3 +
.../test/array/#/slice/is-implemented.js | 3 +
.../es5-ext/test/array/#/slice/shim.js | 17 +
.../es5-ext/test/array/#/some-right.js | 43 +
.../es5-ext/test/array/#/splice/implement.js | 5 +
.../es5-ext/test/array/#/splice/index.js | 3 +
.../test/array/#/splice/is-implemented.js | 3 +
.../es5-ext/test/array/#/splice/shim.js | 19 +
node_modules/es5-ext/test/array/#/uniq.js | 14 +
.../es5-ext/test/array/#/values/implement.js | 5 +
.../es5-ext/test/array/#/values/index.js | 3 +
.../test/array/#/values/is-implemented.js | 3 +
.../es5-ext/test/array/#/values/shim.js | 9 +
node_modules/es5-ext/test/array/__scopes.js | 11 +
.../es5-ext/test/array/_is-extensible.js | 5 +
.../test/array/_sub-array-dummy-safe.js | 7 +
.../es5-ext/test/array/_sub-array-dummy.js | 7 +
.../es5-ext/test/array/from/implement.js | 5 +
node_modules/es5-ext/test/array/from/index.js | 3 +
.../es5-ext/test/array/from/is-implemented.js | 3 +
node_modules/es5-ext/test/array/from/shim.js | 60 +
node_modules/es5-ext/test/array/generate.js | 10 +
.../es5-ext/test/array/is-plain-array.js | 18 +
.../es5-ext/test/array/of/implement.js | 5 +
node_modules/es5-ext/test/array/of/index.js | 3 +
.../es5-ext/test/array/of/is-implemented.js | 3 +
node_modules/es5-ext/test/array/of/shim.js | 68 +
node_modules/es5-ext/test/array/to-array.js | 13 +
.../es5-ext/test/array/valid-array.js | 14 +
.../es5-ext/test/boolean/is-boolean.js | 12 +
node_modules/es5-ext/test/date/#/copy.js | 10 +
.../es5-ext/test/date/#/days-in-month.js | 17 +
node_modules/es5-ext/test/date/#/floor-day.js | 6 +
.../es5-ext/test/date/#/floor-month.js | 6 +
.../es5-ext/test/date/#/floor-year.js | 6 +
node_modules/es5-ext/test/date/#/format.js | 6 +
node_modules/es5-ext/test/date/is-date.js | 10 +
node_modules/es5-ext/test/date/valid-date.js | 12 +
node_modules/es5-ext/test/error/#/throw.js | 10 +
node_modules/es5-ext/test/error/custom.js | 12 +
node_modules/es5-ext/test/error/is-error.js | 16 +
.../es5-ext/test/error/valid-error.js | 9 +
.../es5-ext/test/function/#/compose.js | 9 +
node_modules/es5-ext/test/function/#/copy.js | 19 +
node_modules/es5-ext/test/function/#/curry.js | 18 +
node_modules/es5-ext/test/function/#/lock.js | 7 +
node_modules/es5-ext/test/function/#/not.js | 11 +
.../es5-ext/test/function/#/partial.js | 9 +
.../es5-ext/test/function/#/spread.js | 8 +
.../test/function/#/to-string-tokens.js | 12 +
.../es5-ext/test/function/_define-length.js | 12 +
.../es5-ext/test/function/constant.js | 7 +
.../es5-ext/test/function/identity.js | 7 +
node_modules/es5-ext/test/function/invoke.js | 9 +
.../es5-ext/test/function/is-arguments.js | 11 +
.../es5-ext/test/function/is-function.js | 8 +
node_modules/es5-ext/test/function/noop.js | 5 +
node_modules/es5-ext/test/function/pluck.js | 7 +
.../es5-ext/test/function/valid-function.js | 17 +
node_modules/es5-ext/test/global.js | 5 +
.../es5-ext/test/iterable/for-each.js | 40 +
node_modules/es5-ext/test/iterable/is.js | 20 +
.../es5-ext/test/iterable/validate-object.js | 20 +
.../es5-ext/test/iterable/validate.js | 20 +
.../es5-ext/test/json/safe-stringify.js | 15 +
.../es5-ext/test/math/_pack-ieee754.js | 5 +
.../es5-ext/test/math/_unpack-ieee754.js | 5 +
.../es5-ext/test/math/acosh/implement.js | 5 +
node_modules/es5-ext/test/math/acosh/index.js | 3 +
.../es5-ext/test/math/acosh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/acosh/shim.js | 11 +
.../es5-ext/test/math/asinh/implement.js | 5 +
node_modules/es5-ext/test/math/asinh/index.js | 3 +
.../es5-ext/test/math/asinh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/asinh/shim.js | 10 +
.../es5-ext/test/math/atanh/implement.js | 5 +
node_modules/es5-ext/test/math/atanh/index.js | 3 +
.../es5-ext/test/math/atanh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/atanh/shim.js | 11 +
.../es5-ext/test/math/cbrt/implement.js | 5 +
node_modules/es5-ext/test/math/cbrt/index.js | 3 +
.../es5-ext/test/math/cbrt/is-implemented.js | 3 +
node_modules/es5-ext/test/math/cbrt/shim.js | 11 +
.../es5-ext/test/math/clz32/implement.js | 5 +
node_modules/es5-ext/test/math/clz32/index.js | 3 +
.../es5-ext/test/math/clz32/is-implemented.js | 3 +
node_modules/es5-ext/test/math/clz32/shim.js | 12 +
.../es5-ext/test/math/cosh/implement.js | 5 +
node_modules/es5-ext/test/math/cosh/index.js | 3 +
.../es5-ext/test/math/cosh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/cosh/shim.js | 13 +
.../es5-ext/test/math/expm1/implement.js | 5 +
node_modules/es5-ext/test/math/expm1/index.js | 3 +
.../es5-ext/test/math/expm1/is-implemented.js | 3 +
node_modules/es5-ext/test/math/expm1/shim.js | 9 +
.../es5-ext/test/math/fround/implement.js | 5 +
.../es5-ext/test/math/fround/index.js | 3 +
.../test/math/fround/is-implemented.js | 3 +
node_modules/es5-ext/test/math/fround/shim.js | 9 +
.../es5-ext/test/math/hypot/implement.js | 5 +
node_modules/es5-ext/test/math/hypot/index.js | 3 +
.../es5-ext/test/math/hypot/is-implemented.js | 3 +
node_modules/es5-ext/test/math/hypot/shim.js | 11 +
.../es5-ext/test/math/imul/implement.js | 5 +
node_modules/es5-ext/test/math/imul/index.js | 3 +
.../es5-ext/test/math/imul/is-implemented.js | 3 +
node_modules/es5-ext/test/math/imul/shim.js | 9 +
.../es5-ext/test/math/log10/implement.js | 5 +
node_modules/es5-ext/test/math/log10/index.js | 3 +
.../es5-ext/test/math/log10/is-implemented.js | 3 +
node_modules/es5-ext/test/math/log10/shim.js | 10 +
.../es5-ext/test/math/log1p/implement.js | 5 +
node_modules/es5-ext/test/math/log1p/index.js | 3 +
.../es5-ext/test/math/log1p/is-implemented.js | 3 +
node_modules/es5-ext/test/math/log1p/shim.js | 10 +
.../es5-ext/test/math/log2/implement.js | 5 +
node_modules/es5-ext/test/math/log2/index.js | 3 +
.../es5-ext/test/math/log2/is-implemented.js | 3 +
node_modules/es5-ext/test/math/log2/shim.js | 10 +
.../es5-ext/test/math/sign/implement.js | 5 +
node_modules/es5-ext/test/math/sign/index.js | 3 +
.../es5-ext/test/math/sign/is-implemented.js | 3 +
node_modules/es5-ext/test/math/sign/shim.js | 11 +
.../es5-ext/test/math/sinh/implement.js | 5 +
node_modules/es5-ext/test/math/sinh/index.js | 3 +
.../es5-ext/test/math/sinh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/sinh/shim.js | 13 +
.../es5-ext/test/math/tanh/implement.js | 5 +
node_modules/es5-ext/test/math/tanh/index.js | 3 +
.../es5-ext/test/math/tanh/is-implemented.js | 3 +
node_modules/es5-ext/test/math/tanh/shim.js | 11 +
.../es5-ext/test/math/trunc/implement.js | 5 +
node_modules/es5-ext/test/math/trunc/index.js | 3 +
.../es5-ext/test/math/trunc/is-implemented.js | 3 +
node_modules/es5-ext/test/math/trunc/shim.js | 16 +
node_modules/es5-ext/test/number/#/pad.js | 7 +
.../es5-ext/test/number/epsilon/implement.js | 5 +
.../es5-ext/test/number/epsilon/index.js | 5 +
.../test/number/epsilon/is-implemented.js | 3 +
.../test/number/is-finite/implement.js | 5 +
.../es5-ext/test/number/is-finite/index.js | 3 +
.../test/number/is-finite/is-implemented.js | 3 +
.../es5-ext/test/number/is-finite/shim.js | 8 +
.../test/number/is-integer/implement.js | 5 +
.../es5-ext/test/number/is-integer/index.js | 3 +
.../test/number/is-integer/is-implemented.js | 3 +
.../es5-ext/test/number/is-integer/shim.js | 9 +
.../es5-ext/test/number/is-nan/implement.js | 5 +
.../es5-ext/test/number/is-nan/index.js | 3 +
.../test/number/is-nan/is-implemented.js | 3 +
.../es5-ext/test/number/is-nan/shim.js | 7 +
.../es5-ext/test/number/is-natural.js | 10 +
node_modules/es5-ext/test/number/is-number.js | 13 +
.../test/number/is-safe-integer/implement.js | 5 +
.../test/number/is-safe-integer/index.js | 3 +
.../number/is-safe-integer/is-implemented.js | 3 +
.../test/number/is-safe-integer/shim.js | 11 +
.../test/number/max-safe-integer/implement.js | 5 +
.../test/number/max-safe-integer/index.js | 5 +
.../number/max-safe-integer/is-implemented.js | 3 +
.../test/number/min-safe-integer/implement.js | 5 +
.../test/number/min-safe-integer/index.js | 5 +
.../number/min-safe-integer/is-implemented.js | 3 +
.../es5-ext/test/number/to-integer.js | 10 +
.../es5-ext/test/number/to-pos-integer.js | 10 +
node_modules/es5-ext/test/number/to-uint32.js | 8 +
node_modules/es5-ext/test/object/_iterate.js | 30 +
.../es5-ext/test/object/assign/implement.js | 5 +
.../es5-ext/test/object/assign/index.js | 3 +
.../test/object/assign/is-implemented.js | 3 +
.../es5-ext/test/object/assign/shim.js | 11 +
node_modules/es5-ext/test/object/clear.js | 13 +
node_modules/es5-ext/test/object/compact.js | 14 +
node_modules/es5-ext/test/object/compare.js | 13 +
node_modules/es5-ext/test/object/copy-deep.js | 28 +
node_modules/es5-ext/test/object/copy.js | 19 +
node_modules/es5-ext/test/object/count.js | 11 +
node_modules/es5-ext/test/object/create.js | 22 +
.../object/ensure-natural-number-value.js | 12 +
.../test/object/ensure-natural-number.js | 12 +
node_modules/es5-ext/test/object/eq.js | 12 +
node_modules/es5-ext/test/object/every.js | 21 +
node_modules/es5-ext/test/object/filter.js | 6 +
node_modules/es5-ext/test/object/find-key.js | 23 +
node_modules/es5-ext/test/object/find.js | 23 +
node_modules/es5-ext/test/object/first-key.js | 13 +
node_modules/es5-ext/test/object/flatten.js | 6 +
node_modules/es5-ext/test/object/for-each.js | 10 +
.../es5-ext/test/object/get-property-names.js | 18 +
.../es5-ext/test/object/is-array-like.js | 14 +
.../es5-ext/test/object/is-callable.js | 8 +
.../es5-ext/test/object/is-copy-deep.js | 46 +
node_modules/es5-ext/test/object/is-copy.js | 18 +
node_modules/es5-ext/test/object/is-empty.js | 6 +
.../es5-ext/test/object/is-number-value.js | 15 +
node_modules/es5-ext/test/object/is-object.js | 13 +
.../es5-ext/test/object/is-plain-object.js | 18 +
node_modules/es5-ext/test/object/is-value.js | 14 +
node_modules/es5-ext/test/object/is.js | 12 +
node_modules/es5-ext/test/object/key-of.js | 12 +
.../es5-ext/test/object/keys/implement.js | 5 +
.../es5-ext/test/object/keys/index.js | 3 +
.../test/object/keys/is-implemented.js | 3 +
node_modules/es5-ext/test/object/keys/shim.js | 8 +
node_modules/es5-ext/test/object/map-keys.js | 7 +
node_modules/es5-ext/test/object/map.js | 9 +
.../es5-ext/test/object/mixin-prototypes.js | 67 +
node_modules/es5-ext/test/object/mixin.js | 69 +
.../es5-ext/test/object/normalize-options.js | 32 +
.../es5-ext/test/object/primitive-set.js | 15 +
.../es5-ext/test/object/safe-traverse.js | 15 +
node_modules/es5-ext/test/object/serialize.js | 25 +
.../test/object/set-prototype-of/implement.js | 6 +
.../test/object/set-prototype-of/index.js | 23 +
.../object/set-prototype-of/is-implemented.js | 3 +
.../test/object/set-prototype-of/shim.js | 23 +
node_modules/es5-ext/test/object/some.js | 23 +
node_modules/es5-ext/test/object/to-array.js | 15 +
.../es5-ext/test/object/unserialize.js | 24 +
.../es5-ext/test/object/valid-callable.js | 9 +
.../es5-ext/test/object/valid-object.js | 15 +
.../es5-ext/test/object/valid-value.js | 19 +
.../test/object/validate-array-like-object.js | 15 +
.../test/object/validate-array-like.js | 15 +
.../object/validate-stringifiable-value.js | 16 +
.../test/object/validate-stringifiable.js | 16 +
node_modules/es5-ext/test/reg-exp/#/index.js | 12 +
.../es5-ext/test/reg-exp/#/is-sticky.js | 10 +
.../es5-ext/test/reg-exp/#/is-unicode.js | 10 +
.../es5-ext/test/reg-exp/#/match/implement.js | 5 +
.../es5-ext/test/reg-exp/#/match/index.js | 3 +
.../test/reg-exp/#/match/is-implemented.js | 3 +
.../es5-ext/test/reg-exp/#/match/shim.js | 8 +
.../test/reg-exp/#/replace/implement.js | 5 +
.../es5-ext/test/reg-exp/#/replace/index.js | 3 +
.../test/reg-exp/#/replace/is-implemented.js | 3 +
.../es5-ext/test/reg-exp/#/replace/shim.js | 5 +
.../test/reg-exp/#/search/implement.js | 5 +
.../es5-ext/test/reg-exp/#/search/index.js | 3 +
.../test/reg-exp/#/search/is-implemented.js | 3 +
.../es5-ext/test/reg-exp/#/search/shim.js | 5 +
.../es5-ext/test/reg-exp/#/split/implement.js | 5 +
.../es5-ext/test/reg-exp/#/split/index.js | 3 +
.../test/reg-exp/#/split/is-implemented.js | 3 +
.../es5-ext/test/reg-exp/#/split/shim.js | 5 +
.../test/reg-exp/#/sticky/implement.js | 5 +
.../test/reg-exp/#/sticky/is-implemented.js | 3 +
.../test/reg-exp/#/unicode/implement.js | 5 +
.../test/reg-exp/#/unicode/is-implemented.js | 3 +
node_modules/es5-ext/test/reg-exp/escape.js | 6 +
.../es5-ext/test/reg-exp/is-reg-exp.js | 12 +
.../es5-ext/test/reg-exp/valid-reg-exp.js | 17 +
.../test/string/#/@@iterator/implement.js | 5 +
.../es5-ext/test/string/#/@@iterator/index.js | 3 +
.../string/#/@@iterator/is-implemented.js | 3 +
.../es5-ext/test/string/#/@@iterator/shim.js | 9 +
node_modules/es5-ext/test/string/#/at.js | 97 +
.../es5-ext/test/string/#/camel-to-hyphen.js | 7 +
.../es5-ext/test/string/#/capitalize.js | 9 +
.../test/string/#/case-insensitive-compare.js | 7 +
.../test/string/#/code-point-at/implement.js | 6 +
.../test/string/#/code-point-at/index.js | 3 +
.../string/#/code-point-at/is-implemented.js | 3 +
.../test/string/#/code-point-at/shim.js | 81 +
.../test/string/#/contains/implement.js | 5 +
.../es5-ext/test/string/#/contains/index.js | 3 +
.../test/string/#/contains/is-implemented.js | 3 +
.../es5-ext/test/string/#/contains/shim.js | 14 +
.../test/string/#/ends-with/implement.js | 5 +
.../es5-ext/test/string/#/ends-with/index.js | 3 +
.../test/string/#/ends-with/is-implemented.js | 3 +
.../es5-ext/test/string/#/ends-with/shim.js | 16 +
.../es5-ext/test/string/#/hyphen-to-camel.js | 7 +
node_modules/es5-ext/test/string/#/indent.js | 9 +
node_modules/es5-ext/test/string/#/last.js | 6 +
.../es5-ext/test/string/#/normalize/_data.js | 3 +
.../test/string/#/normalize/implement.js | 5 +
.../es5-ext/test/string/#/normalize/index.js | 3 +
.../test/string/#/normalize/is-implemented.js | 3 +
.../es5-ext/test/string/#/normalize/shim.js | 13 +
node_modules/es5-ext/test/string/#/pad.js | 24 +
.../test/string/#/plain-replace-all.js | 11 +
.../es5-ext/test/string/#/plain-replace.js | 7 +
.../es5-ext/test/string/#/repeat/implement.js | 5 +
.../es5-ext/test/string/#/repeat/index.js | 3 +
.../test/string/#/repeat/is-implemented.js | 3 +
.../es5-ext/test/string/#/repeat/shim.js | 8 +
.../test/string/#/starts-with/implement.js | 5 +
.../test/string/#/starts-with/index.js | 3 +
.../string/#/starts-with/is-implemented.js | 3 +
.../es5-ext/test/string/#/starts-with/shim.js | 14 +
.../es5-ext/test/string/#/uncapitalize.js | 10 +
.../es5-ext/test/string/format-method.js | 7 +
.../test/string/from-code-point/implement.js | 5 +
.../test/string/from-code-point/index.js | 3 +
.../string/from-code-point/is-implemented.js | 3 +
.../test/string/from-code-point/shim.js | 47 +
node_modules/es5-ext/test/string/is-string.js | 11 +
.../es5-ext/test/string/random-uniq.js | 14 +
.../es5-ext/test/string/raw/implement.js | 5 +
node_modules/es5-ext/test/string/raw/index.js | 3 +
.../es5-ext/test/string/raw/is-implemented.js | 3 +
node_modules/es5-ext/test/string/raw/shim.js | 15 +
node_modules/es6-iterator/#/chain.js | 40 +
node_modules/es6-iterator/.lint | 11 +
node_modules/es6-iterator/.npmignore | 4 +
node_modules/es6-iterator/.travis.yml | 13 +
node_modules/es6-iterator/CHANGES | 38 +
node_modules/es6-iterator/LICENSE | 21 +
node_modules/es6-iterator/README.md | 148 +
node_modules/es6-iterator/array.js | 30 +
node_modules/es6-iterator/for-of.js | 46 +
node_modules/es6-iterator/get.js | 15 +
node_modules/es6-iterator/index.js | 90 +
node_modules/es6-iterator/is-iterable.js | 15 +
node_modules/es6-iterator/package.json | 105 +
node_modules/es6-iterator/string.js | 37 +
node_modules/es6-iterator/test/#/chain.js | 23 +
node_modules/es6-iterator/test/array.js | 67 +
node_modules/es6-iterator/test/for-of.js | 40 +
node_modules/es6-iterator/test/get.js | 17 +
node_modules/es6-iterator/test/index.js | 99 +
node_modules/es6-iterator/test/is-iterable.js | 19 +
node_modules/es6-iterator/test/string.js | 23 +
.../es6-iterator/test/valid-iterable.js | 18 +
node_modules/es6-iterator/valid-iterable.js | 8 +
node_modules/es6-symbol/.lint | 15 +
node_modules/es6-symbol/.npmignore | 4 +
node_modules/es6-symbol/.travis.yml | 11 +
node_modules/es6-symbol/CHANGES | 57 +
node_modules/es6-symbol/LICENSE | 19 +
node_modules/es6-symbol/README.md | 71 +
node_modules/es6-symbol/implement.js | 7 +
node_modules/es6-symbol/index.js | 3 +
node_modules/es6-symbol/is-implemented.js | 17 +
.../es6-symbol/is-native-implemented.js | 5 +
node_modules/es6-symbol/is-symbol.js | 9 +
node_modules/es6-symbol/package.json | 105 +
node_modules/es6-symbol/polyfill.js | 118 +
node_modules/es6-symbol/test/implement.js | 3 +
node_modules/es6-symbol/test/index.js | 12 +
.../es6-symbol/test/is-implemented.js | 14 +
.../es6-symbol/test/is-native-implemented.js | 3 +
node_modules/es6-symbol/test/is-symbol.js | 16 +
node_modules/es6-symbol/test/polyfill.js | 29 +
.../es6-symbol/test/validate-symbol.js | 19 +
node_modules/es6-symbol/validate-symbol.js | 8 +
node_modules/es6-weak-map/.lint | 13 +
node_modules/es6-weak-map/.npmignore | 4 +
node_modules/es6-weak-map/.travis.yml | 13 +
node_modules/es6-weak-map/CHANGES | 45 +
node_modules/es6-weak-map/LICENSE | 19 +
node_modules/es6-weak-map/README.md | 63 +
node_modules/es6-weak-map/implement.js | 7 +
node_modules/es6-weak-map/index.js | 3 +
node_modules/es6-weak-map/is-implemented.js | 20 +
.../es6-weak-map/is-native-implemented.js | 8 +
node_modules/es6-weak-map/is-weak-map.js | 13 +
node_modules/es6-weak-map/package.json | 106 +
node_modules/es6-weak-map/polyfill.js | 66 +
node_modules/es6-weak-map/test/implement.js | 3 +
node_modules/es6-weak-map/test/index.js | 6 +
.../es6-weak-map/test/is-implemented.js | 14 +
.../test/is-native-implemented.js | 3 +
node_modules/es6-weak-map/test/is-weak-map.js | 16 +
node_modules/es6-weak-map/test/polyfill.js | 23 +
.../es6-weak-map/test/valid-weak-map.js | 19 +
node_modules/es6-weak-map/valid-weak-map.js | 8 +
node_modules/escape-html/LICENSE | 24 +
node_modules/escape-html/Readme.md | 43 +
node_modules/escape-html/index.js | 78 +
node_modules/escape-html/package.json | 94 +
node_modules/escape-string-regexp/index.js | 11 +
node_modules/escape-string-regexp/license | 21 +
.../escape-string-regexp/package.json | 109 +
node_modules/escape-string-regexp/readme.md | 27 +
node_modules/etag/HISTORY.md | 71 +
node_modules/etag/LICENSE | 22 +
node_modules/etag/README.md | 165 +
node_modules/etag/index.js | 132 +
node_modules/etag/package.json | 109 +
node_modules/event-emitter/.lint | 15 +
node_modules/event-emitter/.npmignore | 3 +
node_modules/event-emitter/.testignore | 1 +
node_modules/event-emitter/.travis.yml | 16 +
node_modules/event-emitter/CHANGES | 73 +
node_modules/event-emitter/LICENSE | 19 +
node_modules/event-emitter/README.md | 98 +
node_modules/event-emitter/all-off.js | 19 +
.../event-emitter/benchmark/many-on.js | 83 +
.../event-emitter/benchmark/single-on.js | 73 +
node_modules/event-emitter/emit-error.js | 13 +
node_modules/event-emitter/has-listeners.js | 16 +
node_modules/event-emitter/index.js | 132 +
node_modules/event-emitter/package.json | 102 +
node_modules/event-emitter/pipe.js | 42 +
node_modules/event-emitter/test/all-off.js | 48 +
node_modules/event-emitter/test/emit-error.js | 14 +
.../event-emitter/test/has-listeners.js | 42 +
node_modules/event-emitter/test/index.js | 107 +
node_modules/event-emitter/test/pipe.js | 53 +
node_modules/event-emitter/test/unify.js | 123 +
node_modules/event-emitter/unify.js | 50 +
node_modules/expand-brackets/LICENSE | 21 +
node_modules/expand-brackets/README.md | 107 +
node_modules/expand-brackets/index.js | 163 +
node_modules/expand-brackets/package.json | 136 +
node_modules/expand-range/LICENSE | 24 +
node_modules/expand-range/README.md | 145 +
node_modules/expand-range/index.js | 43 +
node_modules/expand-range/package.json | 143 +
node_modules/expand-tilde/LICENSE | 21 +
node_modules/expand-tilde/index.js | 22 +
node_modules/expand-tilde/package.json | 138 +
node_modules/express/History.md | 3162 +
node_modules/express/LICENSE | 24 +
node_modules/express/Readme.md | 142 +
node_modules/express/index.js | 11 +
node_modules/express/lib/application.js | 643 +
node_modules/express/lib/express.js | 103 +
node_modules/express/lib/middleware/init.js | 36 +
node_modules/express/lib/middleware/query.js | 46 +
node_modules/express/lib/request.js | 502 +
node_modules/express/lib/response.js | 1065 +
node_modules/express/lib/router/index.js | 645 +
node_modules/express/lib/router/layer.js | 176 +
node_modules/express/lib/router/route.js | 210 +
node_modules/express/lib/utils.js | 299 +
node_modules/express/lib/view.js | 173 +
.../express/node_modules/debug/.jshintrc | 3 +
.../express/node_modules/debug/.npmignore | 6 +
.../express/node_modules/debug/History.md | 195 +
.../express/node_modules/debug/Makefile | 36 +
.../express/node_modules/debug/Readme.md | 188 +
.../express/node_modules/debug/bower.json | 28 +
.../express/node_modules/debug/browser.js | 168 +
.../express/node_modules/debug/component.json | 19 +
.../express/node_modules/debug/debug.js | 197 +
.../express/node_modules/debug/node.js | 209 +
.../express/node_modules/debug/package.json | 106 +
.../express/node_modules/ms/.npmignore | 5 +
.../express/node_modules/ms/History.md | 66 +
node_modules/express/node_modules/ms/LICENSE | 20 +
.../express/node_modules/ms/README.md | 35 +
node_modules/express/node_modules/ms/index.js | 125 +
.../express/node_modules/ms/package.json | 82 +
.../express/node_modules/qs/.eslintignore | 1 +
.../express/node_modules/qs/.eslintrc | 19 +
.../express/node_modules/qs/.jscs.json | 176 +
.../express/node_modules/qs/CHANGELOG.md | 120 +
.../express/node_modules/qs/CONTRIBUTING.md | 1 +
node_modules/express/node_modules/qs/LICENSE | 28 +
.../express/node_modules/qs/dist/qs.js | 487 +
.../express/node_modules/qs/lib/index.js | 9 +
.../express/node_modules/qs/lib/parse.js | 167 +
.../express/node_modules/qs/lib/stringify.js | 137 +
.../express/node_modules/qs/lib/utils.js | 164 +
.../express/node_modules/qs/package.json | 119 +
.../express/node_modules/qs/test/index.js | 5 +
.../express/node_modules/qs/test/parse.js | 423 +
.../express/node_modules/qs/test/stringify.js | 305 +
.../express/node_modules/qs/test/utils.js | 9 +
node_modules/express/package.json | 194 +
node_modules/extend/.eslintrc | 192 +
node_modules/extend/.jscs.json | 104 +
node_modules/extend/.npmignore | 1 +
node_modules/extend/.travis.yml | 44 +
node_modules/extend/CHANGELOG.md | 69 +
node_modules/extend/LICENSE | 23 +
node_modules/extend/README.md | 62 +
node_modules/extend/component.json | 32 +
node_modules/extend/index.js | 86 +
node_modules/extend/package.json | 106 +
node_modules/extglob/LICENSE | 21 +
node_modules/extglob/README.md | 88 +
node_modules/extglob/index.js | 178 +
node_modules/extglob/package.json | 116 +
node_modules/fancy-log/LICENSE | 23 +
node_modules/fancy-log/README.md | 51 +
node_modules/fancy-log/index.js | 51 +
node_modules/fancy-log/package.json | 115 +
node_modules/filename-regex/README.md | 51 +
node_modules/filename-regex/index.js | 10 +
node_modules/filename-regex/package.json | 100 +
node_modules/fill-range/LICENSE | 21 +
node_modules/fill-range/README.md | 290 +
node_modules/fill-range/index.js | 408 +
node_modules/fill-range/package.json | 131 +
node_modules/finalhandler/HISTORY.md | 116 +
node_modules/finalhandler/LICENSE | 22 +
node_modules/finalhandler/README.md | 146 +
node_modules/finalhandler/index.js | 247 +
.../finalhandler/node_modules/debug/.jshintrc | 3 +
.../node_modules/debug/.npmignore | 6 +
.../node_modules/debug/History.md | 195 +
.../finalhandler/node_modules/debug/Makefile | 36 +
.../finalhandler/node_modules/debug/Readme.md | 188 +
.../node_modules/debug/bower.json | 28 +
.../node_modules/debug/browser.js | 168 +
.../node_modules/debug/component.json | 19 +
.../finalhandler/node_modules/debug/debug.js | 197 +
.../finalhandler/node_modules/debug/node.js | 209 +
.../node_modules/debug/package.json | 106 +
.../finalhandler/node_modules/ms/.npmignore | 5 +
.../finalhandler/node_modules/ms/History.md | 66 +
.../finalhandler/node_modules/ms/LICENSE | 20 +
.../finalhandler/node_modules/ms/README.md | 35 +
.../finalhandler/node_modules/ms/index.js | 125 +
.../finalhandler/node_modules/ms/package.json | 82 +
node_modules/finalhandler/package.json | 109 +
node_modules/find-index/README.md | 33 +
node_modules/find-index/index.js | 26 +
node_modules/find-index/last.js | 26 +
node_modules/find-index/package.json | 87 +
node_modules/find-up/index.js | 53 +
node_modules/find-up/license | 21 +
node_modules/find-up/package.json | 118 +
node_modules/find-up/readme.md | 72 +
node_modules/findup-sync/README.md | 67 +
node_modules/findup-sync/index.js | 85 +
node_modules/findup-sync/package.json | 129 +
node_modules/fined/LICENSE | 21 +
node_modules/fined/README.md | 67 +
node_modules/fined/index.js | 159 +
node_modules/fined/package.json | 123 +
node_modules/first-chunk-stream/index.js | 93 +
node_modules/first-chunk-stream/package.json | 99 +
node_modules/first-chunk-stream/readme.md | 62 +
node_modules/flagged-respawn/.npmignore | 1 +
node_modules/flagged-respawn/.travis.yml | 9 +
node_modules/flagged-respawn/LICENSE | 22 +
node_modules/flagged-respawn/README.md | 58 +
node_modules/flagged-respawn/index.js | 18 +
node_modules/flagged-respawn/lib/reorder.js | 16 +
node_modules/flagged-respawn/lib/respawn.js | 15 +
node_modules/flagged-respawn/package.json | 105 +
.../flagged-respawn/test/bin/exit_code.js | 13 +
.../flagged-respawn/test/bin/respawner.js | 17 +
.../flagged-respawn/test/bin/signal.js | 16 +
node_modules/flagged-respawn/test/index.js | 99 +
node_modules/for-in/LICENSE | 21 +
node_modules/for-in/README.md | 85 +
node_modules/for-in/index.js | 16 +
node_modules/for-in/package.json | 146 +
node_modules/for-own/LICENSE | 21 +
node_modules/for-own/README.md | 85 +
node_modules/for-own/index.js | 19 +
node_modules/for-own/package.json | 148 +
node_modules/forwarded/HISTORY.md | 4 +
node_modules/forwarded/LICENSE | 22 +
node_modules/forwarded/README.md | 53 +
node_modules/forwarded/index.js | 35 +
node_modules/forwarded/package.json | 99 +
node_modules/fresh/HISTORY.md | 38 +
node_modules/fresh/LICENSE | 22 +
node_modules/fresh/README.md | 58 +
node_modules/fresh/index.js | 57 +
node_modules/fresh/package.json | 123 +
node_modules/fs-exists-sync/LICENSE | 21 +
node_modules/fs-exists-sync/README.md | 92 +
node_modules/fs-exists-sync/index.js | 18 +
node_modules/fs-exists-sync/package.json | 137 +
node_modules/fs-extra/.npmignore | 8 +
node_modules/fs-extra/CHANGELOG.md | 733 +
node_modules/fs-extra/LICENSE | 15 +
node_modules/fs-extra/README.md | 251 +
node_modules/fs-extra/docs/copy-sync.md | 37 +
node_modules/fs-extra/docs/copy.md | 48 +
node_modules/fs-extra/docs/emptyDir-sync.md | 16 +
node_modules/fs-extra/docs/emptyDir.md | 21 +
node_modules/fs-extra/docs/ensureDir-sync.md | 17 +
node_modules/fs-extra/docs/ensureDir.md | 20 +
node_modules/fs-extra/docs/ensureFile-sync.md | 17 +
node_modules/fs-extra/docs/ensureFile.md | 20 +
node_modules/fs-extra/docs/ensureLink-sync.md | 17 +
node_modules/fs-extra/docs/ensureLink.md | 20 +
.../fs-extra/docs/ensureSymlink-sync.md | 18 +
node_modules/fs-extra/docs/ensureSymlink.md | 21 +
node_modules/fs-extra/docs/move-sync.md | 24 +
node_modules/fs-extra/docs/move.md | 33 +
node_modules/fs-extra/docs/outputFile-sync.md | 19 +
node_modules/fs-extra/docs/outputFile.md | 23 +
node_modules/fs-extra/docs/outputJson-sync.md | 22 +
node_modules/fs-extra/docs/outputJson.md | 26 +
node_modules/fs-extra/docs/readJson-sync.md | 33 +
node_modules/fs-extra/docs/readJson.md | 40 +
node_modules/fs-extra/docs/remove-sync.md | 16 +
node_modules/fs-extra/docs/remove.md | 25 +
node_modules/fs-extra/docs/writeJson-sync.md | 21 +
node_modules/fs-extra/docs/writeJson.md | 27 +
.../fs-extra/lib/copy-sync/copy-file-sync.js | 41 +
.../fs-extra/lib/copy-sync/copy-sync.js | 62 +
node_modules/fs-extra/lib/copy-sync/index.js | 3 +
node_modules/fs-extra/lib/copy/copy.js | 52 +
node_modules/fs-extra/lib/copy/index.js | 3 +
node_modules/fs-extra/lib/copy/ncp.js | 234 +
node_modules/fs-extra/lib/empty/index.js | 47 +
node_modules/fs-extra/lib/ensure/file.js | 45 +
node_modules/fs-extra/lib/ensure/index.js | 23 +
node_modules/fs-extra/lib/ensure/link.js | 60 +
.../fs-extra/lib/ensure/symlink-paths.js | 97 +
.../fs-extra/lib/ensure/symlink-type.js | 31 +
node_modules/fs-extra/lib/ensure/symlink.js | 64 +
node_modules/fs-extra/lib/index.js | 37 +
node_modules/fs-extra/lib/json/index.js | 11 +
node_modules/fs-extra/lib/json/jsonfile.js | 16 +
.../fs-extra/lib/json/output-json-sync.js | 18 +
node_modules/fs-extra/lib/json/output-json.js | 26 +
node_modules/fs-extra/lib/mkdirs/index.js | 9 +
.../fs-extra/lib/mkdirs/mkdirs-sync.js | 59 +
node_modules/fs-extra/lib/mkdirs/mkdirs.js | 63 +
node_modules/fs-extra/lib/mkdirs/win32.js | 25 +
node_modules/fs-extra/lib/move-sync/index.js | 117 +
node_modules/fs-extra/lib/move/index.js | 161 +
node_modules/fs-extra/lib/output/index.js | 37 +
node_modules/fs-extra/lib/remove/index.js | 17 +
node_modules/fs-extra/lib/remove/rimraf.js | 296 +
node_modules/fs-extra/lib/util/assign.js | 16 +
node_modules/fs-extra/lib/util/utimes.js | 72 +
node_modules/fs-extra/package.json | 131 +
node_modules/gaze/LICENSE-MIT | 22 +
node_modules/gaze/README.md | 181 +
node_modules/gaze/lib/gaze.js | 439 +
node_modules/gaze/lib/helper.js | 67 +
node_modules/gaze/package.json | 151 +
node_modules/generic-pool/.eslintrc.js | 6 +
node_modules/generic-pool/.npmignore | 4 +
node_modules/generic-pool/.travis.yml | 21 +
node_modules/generic-pool/CHANGELOG.md | 127 +
node_modules/generic-pool/Makefile | 31 +
node_modules/generic-pool/README.md | 298 +
node_modules/generic-pool/fabfile.py | 27 +
node_modules/generic-pool/lib/generic-pool.js | 568 +
node_modules/generic-pool/package.json | 150 +
.../generic-pool/test/generic-pool.test.js | 797 +
node_modules/get-caller-file/README.md | 4 +
node_modules/get-caller-file/index.js | 20 +
node_modules/get-caller-file/package.json | 93 +
node_modules/glob-base/LICENSE | 21 +
node_modules/glob-base/README.md | 158 +
node_modules/glob-base/index.js | 51 +
node_modules/glob-base/package.json | 116 +
node_modules/glob-parent/.npmignore | 4 +
node_modules/glob-parent/.travis.yml | 8 +
node_modules/glob-parent/LICENSE | 15 +
node_modules/glob-parent/README.md | 43 +
node_modules/glob-parent/index.js | 10 +
node_modules/glob-parent/package.json | 93 +
node_modules/glob-parent/test.js | 28 +
node_modules/glob-stream/LICENSE | 20 +
node_modules/glob-stream/README.md | 67 +
node_modules/glob-stream/index.js | 117 +
.../node_modules/isarray/README.md | 54 +
.../node_modules/isarray/build/build.js | 209 +
.../node_modules/isarray/component.json | 19 +
.../glob-stream/node_modules/isarray/index.js | 3 +
.../node_modules/isarray/package.json | 86 +
.../node_modules/readable-stream/.npmignore | 5 +
.../node_modules/readable-stream/LICENSE | 18 +
.../node_modules/readable-stream/README.md | 15 +
.../node_modules/readable-stream/duplex.js | 1 +
.../readable-stream/lib/_stream_duplex.js | 89 +
.../lib/_stream_passthrough.js | 46 +
.../readable-stream/lib/_stream_readable.js | 982 +
.../readable-stream/lib/_stream_transform.js | 210 +
.../readable-stream/lib/_stream_writable.js | 386 +
.../node_modules/readable-stream/package.json | 112 +
.../readable-stream/passthrough.js | 1 +
.../node_modules/readable-stream/readable.js | 11 +
.../node_modules/readable-stream/transform.js | 1 +
.../node_modules/readable-stream/writable.js | 1 +
.../node_modules/through2/.npmignore | 3 +
.../glob-stream/node_modules/through2/LICENSE | 39 +
.../node_modules/through2/README.md | 132 +
.../node_modules/through2/package.json | 98 +
.../node_modules/through2/through2.js | 96 +
node_modules/glob-stream/package.json | 114 +
node_modules/glob-watcher/.npmignore | 6 +
node_modules/glob-watcher/.travis.yml | 6 +
node_modules/glob-watcher/LICENSE | 20 +
node_modules/glob-watcher/README.md | 53 +
node_modules/glob-watcher/index.js | 39 +
node_modules/glob-watcher/package.json | 99 +
.../glob-watcher/test/fixtures/test.coffee | 1 +
node_modules/glob-watcher/test/main.js | 87 +
node_modules/glob/LICENSE | 15 +
node_modules/glob/README.md | 369 +
node_modules/glob/common.js | 237 +
node_modules/glob/glob.js | 740 +
node_modules/glob/package.json | 105 +
node_modules/glob/sync.js | 457 +
node_modules/glob2base/LICENSE | 20 +
node_modules/glob2base/README.md | 51 +
node_modules/glob2base/index.js | 59 +
node_modules/glob2base/package.json | 106 +
node_modules/global-modules/LICENSE | 21 +
node_modules/global-modules/README.md | 65 +
node_modules/global-modules/index.js | 18 +
.../node_modules/is-windows/LICENSE | 21 +
.../node_modules/is-windows/index.js | 22 +
.../node_modules/is-windows/package.json | 130 +
node_modules/global-modules/package.json | 132 +
node_modules/global-prefix/LICENSE | 21 +
node_modules/global-prefix/README.md | 76 +
node_modules/global-prefix/index.js | 84 +
.../node_modules/is-windows/LICENSE | 21 +
.../node_modules/is-windows/index.js | 22 +
.../node_modules/is-windows/package.json | 130 +
node_modules/global-prefix/package.json | 164 +
node_modules/globule/.jshintrc | 15 +
node_modules/globule/.npmignore | 1 +
node_modules/globule/.travis.yml | 6 +
node_modules/globule/Gruntfile.js | 48 +
node_modules/globule/LICENSE-MIT | 22 +
node_modules/globule/README.md | 117 +
node_modules/globule/lib/globule.js | 172 +
.../globule/node_modules/glob/.npmignore | 2 +
.../globule/node_modules/glob/.travis.yml | 3 +
.../globule/node_modules/glob/LICENSE | 27 +
.../globule/node_modules/glob/README.md | 233 +
.../globule/node_modules/glob/examples/g.js | 9 +
.../node_modules/glob/examples/usr-local.js | 9 +
.../globule/node_modules/glob/glob.js | 643 +
.../globule/node_modules/glob/package.json | 90 +
.../node_modules/glob/test/00-setup.js | 176 +
.../node_modules/glob/test/bash-comparison.js | 63 +
.../node_modules/glob/test/bash-results.json | 348 +
.../node_modules/glob/test/cwd-test.js | 55 +
.../globule/node_modules/glob/test/mark.js | 74 +
.../node_modules/glob/test/nocase-nomagic.js | 113 +
.../node_modules/glob/test/pause-resume.js | 73 +
.../node_modules/glob/test/root-nomount.js | 39 +
.../globule/node_modules/glob/test/root.js | 46 +
.../node_modules/glob/test/zz-cleanup.js | 11 +
.../node_modules/graceful-fs/.npmignore | 1 +
.../globule/node_modules/graceful-fs/LICENSE | 27 +
.../node_modules/graceful-fs/README.md | 33 +
.../node_modules/graceful-fs/graceful-fs.js | 442 +
.../node_modules/graceful-fs/package.json | 101 +
.../node_modules/graceful-fs/test/open.js | 46 +
.../node_modules/graceful-fs/test/ulimit.js | 158 +
.../globule/node_modules/inherits/LICENSE | 16 +
.../globule/node_modules/inherits/README.md | 51 +
.../globule/node_modules/inherits/inherits.js | 29 +
.../node_modules/inherits/package.json | 84 +
.../globule/node_modules/lodash/LICENSE.txt | 22 +
.../globule/node_modules/lodash/README.md | 128 +
.../node_modules/lodash/dist/lodash.compat.js | 5152 +
.../lodash/dist/lodash.compat.min.js | 42 +
.../node_modules/lodash/dist/lodash.js | 4983 +
.../node_modules/lodash/dist/lodash.min.js | 41 +
.../lodash/dist/lodash.underscore.js | 4307 +
.../lodash/dist/lodash.underscore.min.js | 34 +
.../globule/node_modules/lodash/package.json | 132 +
.../globule/node_modules/lru-cache/.npmignore | 1 +
.../node_modules/lru-cache/.travis.yml | 8 +
.../node_modules/lru-cache/CONTRIBUTORS | 14 +
.../globule/node_modules/lru-cache/LICENSE | 15 +
.../globule/node_modules/lru-cache/README.md | 137 +
.../node_modules/lru-cache/lib/lru-cache.js | 334 +
.../node_modules/lru-cache/package.json | 92 +
.../node_modules/lru-cache/test/basic.js | 396 +
.../node_modules/lru-cache/test/foreach.js | 120 +
.../lru-cache/test/memory-leak.js | 51 +
.../node_modules/lru-cache/test/serialize.js | 216 +
.../globule/node_modules/minimatch/.npmignore | 1 +
.../globule/node_modules/minimatch/LICENSE | 23 +
.../globule/node_modules/minimatch/README.md | 218 +
.../node_modules/minimatch/minimatch.js | 1055 +
.../node_modules/minimatch/package.json | 92 +
.../node_modules/minimatch/test/basic.js | 399 +
.../minimatch/test/brace-expand.js | 33 +
.../node_modules/minimatch/test/caching.js | 14 +
.../node_modules/minimatch/test/defaults.js | 274 +
.../test/extglob-ending-with-state-char.js | 8 +
node_modules/globule/package.json | 108 +
.../globule/test/fixtures/expand/README.md | 0
.../globule/test/fixtures/expand/css/baz.css | 0
.../globule/test/fixtures/expand/css/qux.css | 0
.../test/fixtures/expand/deep/deep.txt | 0
.../fixtures/expand/deep/deeper/deeper.txt | 0
.../expand/deep/deeper/deepest/deepest.txt | 0
.../globule/test/fixtures/expand/js/bar.js | 0
.../globule/test/fixtures/expand/js/foo.js | 0
node_modules/globule/test/globule_test.js | 486 +
node_modules/glogg/LICENSE | 22 +
node_modules/glogg/README.md | 92 +
node_modules/glogg/index.js | 34 +
node_modules/glogg/package.json | 105 +
node_modules/graceful-fs/LICENSE | 15 +
node_modules/graceful-fs/README.md | 133 +
node_modules/graceful-fs/fs.js | 21 +
node_modules/graceful-fs/graceful-fs.js | 262 +
node_modules/graceful-fs/legacy-streams.js | 118 +
node_modules/graceful-fs/package.json | 114 +
node_modules/graceful-fs/polyfills.js | 330 +
node_modules/graceful-readlink/.npmignore | 3 +
node_modules/graceful-readlink/.travis.yml | 5 +
node_modules/graceful-readlink/LICENSE | 22 +
node_modules/graceful-readlink/README.md | 17 +
node_modules/graceful-readlink/index.js | 12 +
node_modules/graceful-readlink/package.json | 83 +
node_modules/gulp-help/index.js | 160 +
node_modules/gulp-help/lib/attach-help.js | 29 +
.../gulp-help/lib/calculate-margin.js | 39 +
node_modules/gulp-help/lib/noop.js | 1 +
node_modules/gulp-help/license | 21 +
.../node_modules/object-assign/index.js | 39 +
.../node_modules/object-assign/license | 21 +
.../node_modules/object-assign/package.json | 102 +
.../node_modules/object-assign/readme.md | 51 +
node_modules/gulp-help/package.json | 136 +
node_modules/gulp-help/readme.md | 121 +
node_modules/gulp-util/LICENSE | 20 +
node_modules/gulp-util/README.md | 145 +
node_modules/gulp-util/index.js | 18 +
node_modules/gulp-util/lib/PluginError.js | 130 +
node_modules/gulp-util/lib/buffer.js | 15 +
node_modules/gulp-util/lib/combine.js | 11 +
node_modules/gulp-util/lib/env.js | 4 +
node_modules/gulp-util/lib/isBuffer.js | 7 +
node_modules/gulp-util/lib/isNull.js | 3 +
node_modules/gulp-util/lib/isStream.js | 5 +
node_modules/gulp-util/lib/log.js | 14 +
node_modules/gulp-util/lib/noop.js | 5 +
node_modules/gulp-util/lib/template.js | 23 +
.../node_modules/minimist/.travis.yml | 8 +
.../gulp-util/node_modules/minimist/LICENSE | 18 +
.../node_modules/minimist/example/parse.js | 2 +
.../gulp-util/node_modules/minimist/index.js | 236 +
.../node_modules/minimist/package.json | 117 +
.../node_modules/minimist/readme.markdown | 91 +
.../node_modules/minimist/test/all_bool.js | 32 +
.../node_modules/minimist/test/bool.js | 166 +
.../node_modules/minimist/test/dash.js | 31 +
.../minimist/test/default_bool.js | 35 +
.../node_modules/minimist/test/dotted.js | 22 +
.../node_modules/minimist/test/kv_short.js | 16 +
.../node_modules/minimist/test/long.js | 31 +
.../node_modules/minimist/test/num.js | 36 +
.../node_modules/minimist/test/parse.js | 197 +
.../minimist/test/parse_modified.js | 9 +
.../node_modules/minimist/test/short.js | 67 +
.../node_modules/minimist/test/stop_early.js | 15 +
.../node_modules/minimist/test/unknown.js | 102 +
.../node_modules/minimist/test/whitespace.js | 8 +
.../node_modules/object-assign/index.js | 39 +
.../node_modules/object-assign/license | 21 +
.../node_modules/object-assign/package.json | 102 +
.../node_modules/object-assign/readme.md | 51 +
node_modules/gulp-util/package.json | 130 +
node_modules/gulp/CHANGELOG.md | 233 +
node_modules/gulp/LICENSE | 22 +
node_modules/gulp/README.md | 103 +
node_modules/gulp/bin/gulp.js | 212 +
node_modules/gulp/completion/README.md | 20 +
node_modules/gulp/completion/bash | 27 +
node_modules/gulp/completion/fish | 10 +
node_modules/gulp/completion/powershell | 61 +
node_modules/gulp/completion/zsh | 25 +
node_modules/gulp/gulp.1 | 40 +
node_modules/gulp/index.js | 63 +
node_modules/gulp/lib/completion.js | 22 +
node_modules/gulp/lib/taskTree.js | 14 +
.../gulp/node_modules/minimist/.travis.yml | 8 +
.../gulp/node_modules/minimist/LICENSE | 18 +
.../node_modules/minimist/example/parse.js | 2 +
.../gulp/node_modules/minimist/index.js | 236 +
.../gulp/node_modules/minimist/package.json | 105 +
.../node_modules/minimist/readme.markdown | 91 +
.../node_modules/minimist/test/all_bool.js | 32 +
.../gulp/node_modules/minimist/test/bool.js | 166 +
.../gulp/node_modules/minimist/test/dash.js | 31 +
.../minimist/test/default_bool.js | 35 +
.../gulp/node_modules/minimist/test/dotted.js | 22 +
.../node_modules/minimist/test/kv_short.js | 16 +
.../gulp/node_modules/minimist/test/long.js | 31 +
.../gulp/node_modules/minimist/test/num.js | 36 +
.../gulp/node_modules/minimist/test/parse.js | 197 +
.../minimist/test/parse_modified.js | 9 +
.../gulp/node_modules/minimist/test/short.js | 67 +
.../node_modules/minimist/test/stop_early.js | 15 +
.../node_modules/minimist/test/unknown.js | 102 +
.../node_modules/minimist/test/whitespace.js | 8 +
node_modules/gulp/package.json | 146 +
node_modules/gulplog/CHANGELOG.md | 10 +
node_modules/gulplog/LICENSE | 22 +
node_modules/gulplog/README.md | 79 +
node_modules/gulplog/index.js | 7 +
node_modules/gulplog/package.json | 101 +
node_modules/has-ansi/index.js | 4 +
node_modules/has-ansi/license | 21 +
node_modules/has-ansi/package.json | 118 +
node_modules/has-ansi/readme.md | 36 +
node_modules/has-gulplog/LICENSE | 22 +
node_modules/has-gulplog/README.md | 2 +
node_modules/has-gulplog/index.js | 9 +
node_modules/has-gulplog/package.json | 98 +
node_modules/homedir-polyfill/LICENSE | 21 +
node_modules/homedir-polyfill/README.md | 75 +
node_modules/homedir-polyfill/index.js | 85 +
node_modules/homedir-polyfill/package.json | 127 +
node_modules/hosted-git-info/LICENSE | 13 +
node_modules/hosted-git-info/README.md | 132 +
node_modules/hosted-git-info/git-host-info.js | 68 +
node_modules/hosted-git-info/git-host.js | 114 +
node_modules/hosted-git-info/index.js | 109 +
node_modules/hosted-git-info/package.json | 107 +
node_modules/http-errors/HISTORY.md | 103 +
node_modules/http-errors/LICENSE | 23 +
node_modules/http-errors/README.md | 132 +
node_modules/http-errors/index.js | 223 +
node_modules/http-errors/package.json | 130 +
node_modules/iconv-lite/.npmignore | 6 +
node_modules/iconv-lite/.travis.yml | 22 +
node_modules/iconv-lite/Changelog.md | 108 +
node_modules/iconv-lite/LICENSE | 21 +
node_modules/iconv-lite/README.md | 159 +
.../iconv-lite/encodings/dbcs-codec.js | 554 +
.../iconv-lite/encodings/dbcs-data.js | 176 +
node_modules/iconv-lite/encodings/index.js | 22 +
node_modules/iconv-lite/encodings/internal.js | 187 +
.../iconv-lite/encodings/sbcs-codec.js | 72 +
.../encodings/sbcs-data-generated.js | 451 +
.../iconv-lite/encodings/sbcs-data.js | 169 +
.../encodings/tables/big5-added.json | 122 +
.../iconv-lite/encodings/tables/cp936.json | 264 +
.../iconv-lite/encodings/tables/cp949.json | 273 +
.../iconv-lite/encodings/tables/cp950.json | 177 +
.../iconv-lite/encodings/tables/eucjp.json | 182 +
.../encodings/tables/gb18030-ranges.json | 1 +
.../encodings/tables/gbk-added.json | 55 +
.../iconv-lite/encodings/tables/shiftjis.json | 125 +
node_modules/iconv-lite/encodings/utf16.js | 176 +
node_modules/iconv-lite/encodings/utf7.js | 289 +
node_modules/iconv-lite/lib/bom-handling.js | 52 +
node_modules/iconv-lite/lib/extend-node.js | 214 +
node_modules/iconv-lite/lib/index.d.ts | 31 +
node_modules/iconv-lite/lib/index.js | 141 +
node_modules/iconv-lite/lib/streams.js | 120 +
node_modules/iconv-lite/package.json | 159 +
node_modules/inflection/.npmignore | 4 +
node_modules/inflection/History.md | 232 +
node_modules/inflection/Readme.md | 504 +
node_modules/inflection/bower.json | 58 +
node_modules/inflection/component.json | 36 +
node_modules/inflection/inflection.min.js | 31 +
node_modules/inflection/lib/inflection.js | 1086 +
node_modules/inflection/package.json | 174 +
node_modules/inflight/LICENSE | 15 +
node_modules/inflight/README.md | 37 +
node_modules/inflight/inflight.js | 54 +
node_modules/inflight/package.json | 105 +
node_modules/inherits/LICENSE | 16 +
node_modules/inherits/README.md | 42 +
node_modules/inherits/inherits.js | 7 +
node_modules/inherits/inherits_browser.js | 23 +
node_modules/inherits/package.json | 97 +
node_modules/ini/LICENSE | 15 +
node_modules/ini/README.md | 102 +
node_modules/ini/ini.js | 190 +
node_modules/ini/package.json | 90 +
node_modules/interpret/CHANGELOG | 115 +
node_modules/interpret/LICENSE | 22 +
node_modules/interpret/README.md | 127 +
node_modules/interpret/index.js | 123 +
node_modules/interpret/package.json | 119 +
node_modules/invert-kv/index.js | 15 +
node_modules/invert-kv/package.json | 96 +
node_modules/invert-kv/readme.md | 25 +
node_modules/ipaddr.js/.npmignore | 2 +
node_modules/ipaddr.js/.travis.yml | 10 +
node_modules/ipaddr.js/Cakefile | 18 +
node_modules/ipaddr.js/LICENSE | 19 +
node_modules/ipaddr.js/README.md | 211 +
node_modules/ipaddr.js/bower.json | 29 +
node_modules/ipaddr.js/ipaddr.min.js | 1 +
node_modules/ipaddr.js/lib/ipaddr.js | 535 +
node_modules/ipaddr.js/package.json | 97 +
node_modules/ipaddr.js/src/ipaddr.coffee | 460 +
.../ipaddr.js/test/ipaddr.test.coffee | 346 +
node_modules/is-absolute/LICENSE | 21 +
node_modules/is-absolute/README.md | 113 +
node_modules/is-absolute/index.js | 47 +
.../node_modules/is-windows/LICENSE | 21 +
.../node_modules/is-windows/index.js | 22 +
.../node_modules/is-windows/package.json | 130 +
node_modules/is-absolute/package.json | 171 +
node_modules/is-arrayish/.editorconfig | 18 +
node_modules/is-arrayish/.istanbul.yml | 4 +
node_modules/is-arrayish/.npmignore | 5 +
node_modules/is-arrayish/.travis.yml | 17 +
node_modules/is-arrayish/LICENSE | 21 +
node_modules/is-arrayish/README.md | 16 +
node_modules/is-arrayish/index.js | 10 +
node_modules/is-arrayish/package.json | 98 +
node_modules/is-buffer/.npmignore | 2 +
node_modules/is-buffer/LICENSE | 21 +
node_modules/is-buffer/README.md | 49 +
node_modules/is-buffer/index.js | 21 +
node_modules/is-buffer/package.json | 112 +
node_modules/is-buffer/test/basic.js | 25 +
node_modules/is-builtin-module/index.js | 10 +
node_modules/is-builtin-module/license | 21 +
node_modules/is-builtin-module/package.json | 106 +
node_modules/is-builtin-module/readme.md | 33 +
node_modules/is-dotfile/LICENSE | 21 +
node_modules/is-dotfile/README.md | 74 +
node_modules/is-dotfile/index.js | 15 +
node_modules/is-dotfile/package.json | 116 +
node_modules/is-equal-shallow/LICENSE | 21 +
node_modules/is-equal-shallow/README.md | 90 +
node_modules/is-equal-shallow/index.js | 27 +
node_modules/is-equal-shallow/package.json | 120 +
node_modules/is-extendable/LICENSE | 21 +
node_modules/is-extendable/README.md | 72 +
node_modules/is-extendable/index.js | 13 +
node_modules/is-extendable/package.json | 114 +
node_modules/is-extglob/LICENSE | 21 +
node_modules/is-extglob/README.md | 75 +
node_modules/is-extglob/index.js | 11 +
node_modules/is-extglob/package.json | 110 +
node_modules/is-fullwidth-code-point/index.js | 46 +
node_modules/is-fullwidth-code-point/license | 21 +
.../is-fullwidth-code-point/package.json | 108 +
.../is-fullwidth-code-point/readme.md | 39 +
node_modules/is-glob/LICENSE | 21 +
node_modules/is-glob/README.md | 105 +
node_modules/is-glob/index.js | 14 +
node_modules/is-glob/package.json | 127 +
node_modules/is-number/LICENSE | 21 +
node_modules/is-number/README.md | 103 +
node_modules/is-number/index.js | 19 +
node_modules/is-number/package.json | 126 +
node_modules/is-posix-bracket/LICENSE | 21 +
node_modules/is-posix-bracket/README.md | 88 +
node_modules/is-posix-bracket/index.js | 10 +
node_modules/is-posix-bracket/package.json | 131 +
node_modules/is-primitive/LICENSE | 21 +
node_modules/is-primitive/README.md | 57 +
node_modules/is-primitive/index.js | 13 +
node_modules/is-primitive/package.json | 104 +
node_modules/is-promise/.npmignore | 6 +
node_modules/is-promise/.travis.yml | 3 +
node_modules/is-promise/LICENSE | 19 +
node_modules/is-promise/index.js | 5 +
node_modules/is-promise/package.json | 82 +
node_modules/is-promise/readme.md | 29 +
node_modules/is-relative/LICENSE | 21 +
node_modules/is-relative/README.md | 54 +
node_modules/is-relative/index.js | 11 +
node_modules/is-relative/package.json | 117 +
node_modules/is-unc-path/LICENSE | 21 +
node_modules/is-unc-path/README.md | 193 +
node_modules/is-unc-path/index.js | 8 +
node_modules/is-unc-path/package.json | 139 +
node_modules/is-utf8/LICENSE | 9 +
node_modules/is-utf8/README.md | 16 +
node_modules/is-utf8/is-utf8.js | 76 +
node_modules/is-utf8/package.json | 87 +
node_modules/is-windows/LICENSE | 21 +
node_modules/is-windows/README.md | 79 +
node_modules/is-windows/index.js | 24 +
node_modules/is-windows/package.json | 133 +
node_modules/isarray/.npmignore | 1 +
node_modules/isarray/.travis.yml | 4 +
node_modules/isarray/Makefile | 6 +
node_modules/isarray/README.md | 60 +
node_modules/isarray/component.json | 19 +
node_modules/isarray/index.js | 5 +
node_modules/isarray/package.json | 105 +
node_modules/isarray/test.js | 20 +
node_modules/isexe/.npmignore | 2 +
node_modules/isexe/LICENSE | 15 +
node_modules/isexe/README.md | 51 +
node_modules/isexe/index.js | 57 +
node_modules/isexe/mode.js | 41 +
node_modules/isexe/package.json | 95 +
node_modules/isexe/test/basic.js | 221 +
node_modules/isexe/windows.js | 42 +
node_modules/isobject/LICENSE | 21 +
node_modules/isobject/README.md | 112 +
node_modules/isobject/index.js | 14 +
node_modules/isobject/package.json | 137 +
node_modules/jade/.npmignore | 15 +
node_modules/jade/.release.json | 1 +
node_modules/jade/History.md | 991 +
node_modules/jade/LICENSE | 22 +
node_modules/jade/README.md | 154 +
node_modules/jade/Readme_zh-cn.md | 1285 +
node_modules/jade/bin/jade.js | 295 +
node_modules/jade/block-code.html | 0
node_modules/jade/component.json | 16 +
node_modules/jade/jade.js | 9196 ++
node_modules/jade/lib/compiler.js | 723 +
node_modules/jade/lib/doctypes.js | 12 +
node_modules/jade/lib/filters-client.js | 10 +
node_modules/jade/lib/filters.js | 96 +
node_modules/jade/lib/index.js | 418 +
node_modules/jade/lib/inline-tags.js | 23 +
node_modules/jade/lib/lexer.js | 949 +
node_modules/jade/lib/nodes/attrs.js | 83 +
node_modules/jade/lib/nodes/block-comment.js | 24 +
node_modules/jade/lib/nodes/block.js | 118 +
node_modules/jade/lib/nodes/case.js | 33 +
node_modules/jade/lib/nodes/code.js | 26 +
node_modules/jade/lib/nodes/comment.js | 23 +
node_modules/jade/lib/nodes/doctype.js | 20 +
node_modules/jade/lib/nodes/each.js | 26 +
node_modules/jade/lib/nodes/filter.js | 24 +
node_modules/jade/lib/nodes/index.js | 16 +
node_modules/jade/lib/nodes/literal.js | 20 +
node_modules/jade/lib/nodes/mixin-block.js | 18 +
node_modules/jade/lib/nodes/mixin.js | 26 +
node_modules/jade/lib/nodes/node.js | 18 +
node_modules/jade/lib/nodes/tag.js | 89 +
node_modules/jade/lib/nodes/text.js | 26 +
node_modules/jade/lib/parser.js | 846 +
node_modules/jade/lib/runtime.js | 246 +
node_modules/jade/lib/utils.js | 53 +
node_modules/jade/package.json | 159 +
node_modules/jade/release.js | 35 +
node_modules/jade/runtime.js | 252 +
node_modules/js-beautify/.codeclimate.yml | 13 +
node_modules/js-beautify/.jshintignore | 9 +
node_modules/js-beautify/.jshintrc | 10 +
node_modules/js-beautify/.npmignore | 5 +
node_modules/js-beautify/.travis.yml | 14 +
node_modules/js-beautify/CHANGELOG.md | 542 +
node_modules/js-beautify/CONTRIBUTING.md | 139 +
node_modules/js-beautify/ISSUE_TEMPLATE.md | 55 +
node_modules/js-beautify/LICENSE | 9 +
node_modules/js-beautify/README.md | 319 +
node_modules/js-beautify/appveyor.yml | 35 +
node_modules/js-beautify/bower.json | 11 +
node_modules/js-beautify/build | 5 +
.../js-beautify/js/bin/css-beautify.js | 4 +
.../js-beautify/js/bin/html-beautify.js | 4 +
.../js-beautify/js/bin/js-beautify.js | 4 +
.../js-beautify/js/config/defaults.json | 18 +
node_modules/js-beautify/js/index.js | 81 +
.../js-beautify/js/lib/beautify-css.js | 571 +
.../js-beautify/js/lib/beautify-html.js | 1128 +
node_modules/js-beautify/js/lib/beautify.js | 2481 +
node_modules/js-beautify/js/lib/cli.js | 620 +
.../javascriptobfuscator_unpacker.js | 103 +
.../js/lib/unpackers/myobfuscate_unpacker.js | 90 +
.../js/lib/unpackers/p_a_c_k_e_r_unpacker.js | 83 +
.../js/lib/unpackers/urlencode_unpacker.js | 73 +
.../js-beautify/js/test/amd-beautify-tests.js | 62 +
.../js/test/generated/beautify-css-tests.js | 1393 +
.../js/test/generated/beautify-html-tests.js | 3172 +
.../generated/beautify-javascript-tests.js | 5825 +
.../js/test/node-beautify-html-perf-tests.js | 51 +
.../js/test/node-beautify-perf-tests.js | 50 +
.../js/test/node-beautify-tests.js | 45 +
.../js/test/requirejs-html-beautify.html | 58 +
.../test/resources/configerror/.jsbeautifyrc | 6 +
.../configerror/subDir1/subDir2/empty.txt | 0
.../test/resources/editorconfig/.editorconfig | 6 +
.../resources/editorconfig/cr/.editorconfig | 3 +
.../resources/editorconfig/crlf/.editorconfig | 3 +
.../editorconfig/error/.editorconfig | 1 +
.../resources/editorconfig/example-base.js | 3 +
.../js-beautify/js/test/resources/example1.js | 3 +
.../resources/indent11chars/.jsbeautifyrc | 6 +
.../indent11chars/subDir1/subDir2/empty.txt | 0
node_modules/js-beautify/js/test/run-tests | 17 +
.../js-beautify/js/test/sanitytest.js | 144 +
.../js-beautify/js/test/shell-smoke-test.sh | 383 +
node_modules/js-beautify/jsbeautifyrc | 18 +
node_modules/js-beautify/package.json | 148 +
.../js-beautify/test/data/css/node.mustache | 269 +
.../js-beautify/test/data/css/python.mustache | 270 +
.../js-beautify/test/data/css/tests.js | 445 +
.../js-beautify/test/data/html/node.mustache | 378 +
.../js-beautify/test/data/html/tests.js | 1089 +
.../test/data/javascript/inputlib.js | 84 +
.../test/data/javascript/node.mustache | 1114 +
.../test/data/javascript/python.mustache | 1322 +
.../js-beautify/test/data/javascript/tests.js | 3083 +
.../js-beautify/test/generate-tests.js | 216 +
.../test/resources/html-with-base64image.html | 1 +
.../test/resources/underscore-min.js | 6 +
.../js-beautify/test/resources/underscore.js | 1439 +
node_modules/js-beautify/tools/build.sh | 140 +
.../js-beautify/tools/generate-changelog.sh | 40 +
.../js-beautify/tools/git-status-clear.sh | 18 +
node_modules/js-beautify/tools/release-all.sh | 86 +
node_modules/jsonfile/.npmignore | 2 +
node_modules/jsonfile/CHANGELOG.md | 126 +
node_modules/jsonfile/LICENSE | 15 +
node_modules/jsonfile/README.md | 162 +
node_modules/jsonfile/appveyor.yml | 28 +
node_modules/jsonfile/index.js | 133 +
node_modules/jsonfile/package.json | 103 +
node_modules/jstransformer/LICENSE | 19 +
node_modules/jstransformer/README.md | 103 +
node_modules/jstransformer/index.js | 328 +
node_modules/jstransformer/package.json | 94 +
node_modules/kind-of/LICENSE | 21 +
node_modules/kind-of/README.md | 258 +
node_modules/kind-of/index.js | 116 +
node_modules/kind-of/package.json | 173 +
node_modules/lazy-cache/LICENSE | 21 +
node_modules/lazy-cache/README.md | 147 +
node_modules/lazy-cache/index.js | 67 +
node_modules/lazy-cache/package.json | 129 +
node_modules/lcid/index.js | 22 +
node_modules/lcid/lcid.json | 203 +
node_modules/lcid/license | 21 +
node_modules/lcid/package.json | 109 +
node_modules/lcid/readme.md | 35 +
node_modules/liftoff/.jscsrc | 60 +
node_modules/liftoff/.jshintrc | 11 +
node_modules/liftoff/.npmignore | 2 +
node_modules/liftoff/.travis.yml | 16 +
node_modules/liftoff/CHANGELOG | 127 +
node_modules/liftoff/LICENSE | 22 +
node_modules/liftoff/README.md | 429 +
node_modules/liftoff/UPGRADING.md | 28 +
node_modules/liftoff/appveyor.yml | 29 +
node_modules/liftoff/index.js | 210 +
node_modules/liftoff/lib/build_config_name.js | 17 +
node_modules/liftoff/lib/file_search.js | 14 +
node_modules/liftoff/lib/find_config.js | 25 +
node_modules/liftoff/lib/find_cwd.js | 18 +
node_modules/liftoff/lib/parse_options.js | 35 +
node_modules/liftoff/lib/register_loader.js | 25 +
node_modules/liftoff/lib/silent_require.js | 5 +
node_modules/liftoff/package.json | 120 +
node_modules/load-json-file/index.js | 21 +
node_modules/load-json-file/license | 21 +
.../node_modules/strip-bom/index.js | 17 +
.../node_modules/strip-bom/license | 21 +
.../node_modules/strip-bom/package.json | 105 +
.../node_modules/strip-bom/readme.md | 39 +
node_modules/load-json-file/package.json | 111 +
node_modules/load-json-file/readme.md | 45 +
node_modules/lodash._basecopy/LICENSE.txt | 22 +
node_modules/lodash._basecopy/README.md | 20 +
node_modules/lodash._basecopy/index.js | 32 +
node_modules/lodash._basecopy/package.json | 123 +
node_modules/lodash._basetostring/LICENSE | 22 +
node_modules/lodash._basetostring/README.md | 20 +
node_modules/lodash._basetostring/index.js | 22 +
.../lodash._basetostring/package.json | 123 +
node_modules/lodash._basevalues/LICENSE.txt | 22 +
node_modules/lodash._basevalues/README.md | 20 +
node_modules/lodash._basevalues/index.js | 31 +
node_modules/lodash._basevalues/package.json | 107 +
node_modules/lodash._getnative/LICENSE | 22 +
node_modules/lodash._getnative/README.md | 20 +
node_modules/lodash._getnative/index.js | 137 +
node_modules/lodash._getnative/package.json | 119 +
.../lodash._isiterateecall/LICENSE.txt | 22 +
node_modules/lodash._isiterateecall/README.md | 20 +
node_modules/lodash._isiterateecall/index.js | 132 +
.../lodash._isiterateecall/package.json | 123 +
node_modules/lodash._reescape/LICENSE.txt | 22 +
node_modules/lodash._reescape/README.md | 20 +
node_modules/lodash._reescape/index.js | 13 +
node_modules/lodash._reescape/package.json | 107 +
node_modules/lodash._reevaluate/LICENSE.txt | 22 +
node_modules/lodash._reevaluate/README.md | 20 +
node_modules/lodash._reevaluate/index.js | 13 +
node_modules/lodash._reevaluate/package.json | 107 +
.../lodash._reinterpolate/LICENSE.txt | 22 +
node_modules/lodash._reinterpolate/README.md | 20 +
node_modules/lodash._reinterpolate/index.js | 13 +
.../lodash._reinterpolate/package.json | 121 +
node_modules/lodash._root/LICENSE | 23 +
node_modules/lodash._root/README.md | 18 +
node_modules/lodash._root/index.js | 59 +
node_modules/lodash._root/package.json | 109 +
node_modules/lodash.assignwith/LICENSE | 47 +
node_modules/lodash.assignwith/README.md | 18 +
node_modules/lodash.assignwith/index.js | 622 +
node_modules/lodash.assignwith/package.json | 113 +
node_modules/lodash.escape/LICENSE | 22 +
node_modules/lodash.escape/README.md | 18 +
node_modules/lodash.escape/index.js | 180 +
node_modules/lodash.escape/package.json | 116 +
node_modules/lodash.isarguments/LICENSE | 47 +
node_modules/lodash.isarguments/README.md | 18 +
node_modules/lodash.isarguments/index.js | 229 +
node_modules/lodash.isarguments/package.json | 113 +
node_modules/lodash.isarray/LICENSE | 22 +
node_modules/lodash.isarray/README.md | 20 +
node_modules/lodash.isarray/index.js | 180 +
node_modules/lodash.isarray/package.json | 129 +
node_modules/lodash.isempty/LICENSE | 47 +
node_modules/lodash.isempty/README.md | 18 +
node_modules/lodash.isempty/index.js | 582 +
node_modules/lodash.isempty/package.json | 113 +
node_modules/lodash.isplainobject/LICENSE | 47 +
node_modules/lodash.isplainobject/README.md | 18 +
node_modules/lodash.isplainobject/index.js | 139 +
.../lodash.isplainobject/package.json | 114 +
node_modules/lodash.isstring/LICENSE | 22 +
node_modules/lodash.isstring/README.md | 18 +
node_modules/lodash.isstring/index.js | 95 +
node_modules/lodash.isstring/package.json | 114 +
node_modules/lodash.keys/LICENSE | 22 +
node_modules/lodash.keys/README.md | 20 +
node_modules/lodash.keys/index.js | 236 +
node_modules/lodash.keys/package.json | 133 +
node_modules/lodash.mapvalues/LICENSE | 47 +
node_modules/lodash.mapvalues/README.md | 18 +
node_modules/lodash.mapvalues/index.js | 2280 +
node_modules/lodash.mapvalues/package.json | 113 +
node_modules/lodash.pick/LICENSE | 47 +
node_modules/lodash.pick/README.md | 18 +
node_modules/lodash.pick/index.js | 503 +
node_modules/lodash.pick/package.json | 113 +
node_modules/lodash.restparam/LICENSE.txt | 22 +
node_modules/lodash.restparam/README.md | 20 +
node_modules/lodash.restparam/index.js | 67 +
node_modules/lodash.restparam/package.json | 129 +
node_modules/lodash.template/LICENSE | 22 +
node_modules/lodash.template/README.md | 20 +
node_modules/lodash.template/index.js | 389 +
node_modules/lodash.template/package.json | 139 +
node_modules/lodash.templatesettings/LICENSE | 22 +
.../lodash.templatesettings/README.md | 18 +
node_modules/lodash.templatesettings/index.js | 77 +
.../lodash.templatesettings/package.json | 115 +
node_modules/lodash/LICENSE | 47 +
node_modules/lodash/README.md | 40 +
node_modules/lodash/_DataView.js | 7 +
node_modules/lodash/_Hash.js | 32 +
node_modules/lodash/_LazyWrapper.js | 28 +
node_modules/lodash/_ListCache.js | 32 +
node_modules/lodash/_LodashWrapper.js | 22 +
node_modules/lodash/_Map.js | 7 +
node_modules/lodash/_MapCache.js | 32 +
node_modules/lodash/_Promise.js | 7 +
node_modules/lodash/_Reflect.js | 6 +
node_modules/lodash/_Set.js | 7 +
node_modules/lodash/_SetCache.js | 27 +
node_modules/lodash/_Stack.js | 26 +
node_modules/lodash/_Symbol.js | 6 +
node_modules/lodash/_Uint8Array.js | 6 +
node_modules/lodash/_WeakMap.js | 7 +
node_modules/lodash/_addMapEntry.js | 15 +
node_modules/lodash/_addSetEntry.js | 14 +
node_modules/lodash/_apply.js | 22 +
node_modules/lodash/_arrayAggregator.js | 22 +
node_modules/lodash/_arrayEach.js | 22 +
node_modules/lodash/_arrayEachRight.js | 21 +
node_modules/lodash/_arrayEvery.js | 23 +
node_modules/lodash/_arrayFilter.js | 25 +
node_modules/lodash/_arrayIncludes.js | 16 +
node_modules/lodash/_arrayIncludesWith.js | 22 +
node_modules/lodash/_arrayMap.js | 21 +
node_modules/lodash/_arrayPush.js | 20 +
node_modules/lodash/_arrayReduce.js | 26 +
node_modules/lodash/_arrayReduceRight.js | 24 +
node_modules/lodash/_arraySome.js | 23 +
node_modules/lodash/_assignInDefaults.js | 27 +
node_modules/lodash/_assignMergeValue.js | 19 +
node_modules/lodash/_assignValue.js | 27 +
node_modules/lodash/_assocIndexOf.js | 21 +
node_modules/lodash/_baseAggregator.js | 21 +
node_modules/lodash/_baseAssign.js | 17 +
node_modules/lodash/_baseAt.js | 23 +
node_modules/lodash/_baseClamp.js | 22 +
node_modules/lodash/_baseClone.js | 139 +
node_modules/lodash/_baseConforms.js | 33 +
node_modules/lodash/_baseCreate.js | 18 +
node_modules/lodash/_baseDelay.js | 21 +
node_modules/lodash/_baseDifference.js | 67 +
node_modules/lodash/_baseEach.js | 14 +
node_modules/lodash/_baseEachRight.js | 14 +
node_modules/lodash/_baseEvery.js | 21 +
node_modules/lodash/_baseExtremum.js | 32 +
node_modules/lodash/_baseFill.js | 32 +
node_modules/lodash/_baseFilter.js | 21 +
node_modules/lodash/_baseFind.js | 25 +
node_modules/lodash/_baseFindIndex.js | 23 +
node_modules/lodash/_baseFlatten.js | 38 +
node_modules/lodash/_baseFor.js | 16 +
node_modules/lodash/_baseForOwn.js | 16 +
node_modules/lodash/_baseForOwnRight.js | 16 +
node_modules/lodash/_baseForRight.js | 15 +
node_modules/lodash/_baseFunctions.js | 19 +
node_modules/lodash/_baseGet.js | 25 +
node_modules/lodash/_baseGetAllKeys.js | 20 +
node_modules/lodash/_baseGt.js | 14 +
node_modules/lodash/_baseHas.js | 25 +
node_modules/lodash/_baseHasIn.js | 13 +
node_modules/lodash/_baseInRange.js | 18 +
node_modules/lodash/_baseIndexOf.js | 27 +
node_modules/lodash/_baseIndexOfWith.js | 23 +
node_modules/lodash/_baseIntersection.js | 74 +
node_modules/lodash/_baseInverter.js | 21 +
node_modules/lodash/_baseInvoke.js | 28 +
node_modules/lodash/_baseIsEqual.js | 30 +
node_modules/lodash/_baseIsEqualDeep.js | 82 +
node_modules/lodash/_baseIsMatch.js | 62 +
node_modules/lodash/_baseIteratee.js | 31 +
node_modules/lodash/_baseKeys.js | 16 +
node_modules/lodash/_baseKeysIn.js | 36 +
node_modules/lodash/_baseLodash.js | 10 +
node_modules/lodash/_baseLt.js | 14 +
node_modules/lodash/_baseMap.js | 22 +
node_modules/lodash/_baseMatches.js | 22 +
node_modules/lodash/_baseMatchesProperty.js | 33 +
node_modules/lodash/_baseMean.js | 20 +
node_modules/lodash/_baseMerge.js | 50 +
node_modules/lodash/_baseMergeDeep.js | 83 +
node_modules/lodash/_baseNth.js | 20 +
node_modules/lodash/_baseOrderBy.js | 34 +
node_modules/lodash/_basePick.js | 22 +
node_modules/lodash/_basePickBy.js | 28 +
node_modules/lodash/_baseProperty.js | 14 +
node_modules/lodash/_basePropertyDeep.js | 16 +
node_modules/lodash/_basePullAll.js | 47 +
node_modules/lodash/_basePullAt.js | 50 +
node_modules/lodash/_baseRandom.js | 18 +
node_modules/lodash/_baseRange.js | 28 +
node_modules/lodash/_baseReduce.js | 23 +
node_modules/lodash/_baseRepeat.js | 35 +
node_modules/lodash/_baseSet.js | 46 +
node_modules/lodash/_baseSetData.js | 17 +
node_modules/lodash/_baseSlice.js | 31 +
node_modules/lodash/_baseSome.js | 22 +
node_modules/lodash/_baseSortBy.js | 21 +
node_modules/lodash/_baseSortedIndex.js | 42 +
node_modules/lodash/_baseSortedIndexBy.js | 64 +
node_modules/lodash/_baseSortedUniq.js | 30 +
node_modules/lodash/_baseSum.js | 24 +
node_modules/lodash/_baseTimes.js | 20 +
node_modules/lodash/_baseToNumber.js | 24 +
node_modules/lodash/_baseToPairs.js | 18 +
node_modules/lodash/_baseToString.js | 31 +
node_modules/lodash/_baseUnary.js | 14 +
node_modules/lodash/_baseUniq.js | 72 +
node_modules/lodash/_baseUnset.js | 24 +
node_modules/lodash/_baseUpdate.js | 18 +
node_modules/lodash/_baseValues.js | 19 +
node_modules/lodash/_baseWhile.js | 26 +
node_modules/lodash/_baseWrapperValue.js | 25 +
node_modules/lodash/_baseXor.js | 30 +
node_modules/lodash/_baseZipObject.js | 23 +
node_modules/lodash/_cacheHas.js | 13 +
node_modules/lodash/_castArrayLikeObject.js | 14 +
node_modules/lodash/_castFunction.js | 14 +
node_modules/lodash/_castPath.js | 15 +
node_modules/lodash/_castSlice.js | 18 +
node_modules/lodash/_charsEndIndex.js | 19 +
node_modules/lodash/_charsStartIndex.js | 20 +
node_modules/lodash/_checkGlobal.js | 12 +
node_modules/lodash/_cloneArrayBuffer.js | 16 +
node_modules/lodash/_cloneBuffer.js | 18 +
node_modules/lodash/_cloneDataView.js | 16 +
node_modules/lodash/_cloneMap.js | 19 +
node_modules/lodash/_cloneRegExp.js | 17 +
node_modules/lodash/_cloneSet.js | 19 +
node_modules/lodash/_cloneSymbol.js | 18 +
node_modules/lodash/_cloneTypedArray.js | 16 +
node_modules/lodash/_compareAscending.js | 41 +
node_modules/lodash/_compareMultiple.js | 44 +
node_modules/lodash/_composeArgs.js | 39 +
node_modules/lodash/_composeArgsRight.js | 41 +
node_modules/lodash/_copyArray.js | 20 +
node_modules/lodash/_copyObject.js | 31 +
node_modules/lodash/_copySymbols.js | 16 +
node_modules/lodash/_countHolders.js | 21 +
node_modules/lodash/_createAggregator.js | 23 +
node_modules/lodash/_createAssigner.js | 37 +
node_modules/lodash/_createBaseEach.js | 32 +
node_modules/lodash/_createBaseFor.js | 25 +
node_modules/lodash/_createBaseWrapper.js | 29 +
node_modules/lodash/_createCaseFirst.js | 33 +
node_modules/lodash/_createCompounder.js | 24 +
node_modules/lodash/_createCtorWrapper.js | 37 +
node_modules/lodash/_createCurryWrapper.js | 47 +
node_modules/lodash/_createFlow.js | 85 +
node_modules/lodash/_createHybridWrapper.js | 93 +
node_modules/lodash/_createInverter.js | 17 +
node_modules/lodash/_createMathOperation.js | 37 +
node_modules/lodash/_createOver.js | 32 +
node_modules/lodash/_createPadding.js | 33 +
node_modules/lodash/_createPartialWrapper.js | 44 +
node_modules/lodash/_createRange.js | 31 +
node_modules/lodash/_createRecurryWrapper.js | 56 +
.../lodash/_createRelationalOperation.js | 20 +
node_modules/lodash/_createRound.js | 30 +
node_modules/lodash/_createSet.js | 19 +
node_modules/lodash/_createToPairs.js | 30 +
node_modules/lodash/_createWrapper.js | 106 +
node_modules/lodash/_deburrLetter.js | 33 +
node_modules/lodash/_equalArrays.js | 81 +
node_modules/lodash/_equalByTag.js | 114 +
node_modules/lodash/_equalObjects.js | 83 +
node_modules/lodash/_escapeHtmlChar.js | 22 +
node_modules/lodash/_escapeStringChar.js | 22 +
node_modules/lodash/_getAllKeys.js | 16 +
node_modules/lodash/_getAllKeysIn.js | 17 +
node_modules/lodash/_getData.js | 15 +
node_modules/lodash/_getFuncName.js | 31 +
node_modules/lodash/_getHolder.js | 13 +
node_modules/lodash/_getLength.js | 16 +
node_modules/lodash/_getMapData.js | 18 +
node_modules/lodash/_getMatchData.js | 21 +
node_modules/lodash/_getNative.js | 16 +
node_modules/lodash/_getPrototype.js | 15 +
node_modules/lodash/_getSymbols.js | 24 +
node_modules/lodash/_getSymbolsIn.js | 25 +
node_modules/lodash/_getTag.js | 70 +
node_modules/lodash/_getView.js | 33 +
node_modules/lodash/_hasPath.js | 41 +
node_modules/lodash/_hashClear.js | 14 +
node_modules/lodash/_hashDelete.js | 15 +
node_modules/lodash/_hashGet.js | 30 +
node_modules/lodash/_hashHas.js | 23 +
node_modules/lodash/_hashSet.js | 22 +
node_modules/lodash/_indexKeys.js | 24 +
node_modules/lodash/_indexOfNaN.js | 23 +
node_modules/lodash/_initCloneArray.js | 26 +
node_modules/lodash/_initCloneByTag.js | 80 +
node_modules/lodash/_initCloneObject.js | 18 +
node_modules/lodash/_isFlattenable.js | 15 +
node_modules/lodash/_isFlattenableIteratee.js | 16 +
node_modules/lodash/_isHostObject.js | 20 +
node_modules/lodash/_isIndex.js | 22 +
node_modules/lodash/_isIterateeCall.js | 30 +
node_modules/lodash/_isKey.js | 29 +
node_modules/lodash/_isKeyable.js | 15 +
node_modules/lodash/_isLaziable.js | 28 +
node_modules/lodash/_isPrototype.js | 18 +
node_modules/lodash/_isStrictComparable.js | 15 +
node_modules/lodash/_iteratorToArray.js | 18 +
node_modules/lodash/_lazyClone.js | 23 +
node_modules/lodash/_lazyReverse.js | 23 +
node_modules/lodash/_lazyValue.js | 73 +
node_modules/lodash/_listCacheClear.js | 12 +
node_modules/lodash/_listCacheDelete.js | 34 +
node_modules/lodash/_listCacheGet.js | 19 +
node_modules/lodash/_listCacheHas.js | 16 +
node_modules/lodash/_listCacheSet.js | 25 +
node_modules/lodash/_mapCacheClear.js | 20 +
node_modules/lodash/_mapCacheDelete.js | 16 +
node_modules/lodash/_mapCacheGet.js | 16 +
node_modules/lodash/_mapCacheHas.js | 16 +
node_modules/lodash/_mapCacheSet.js | 18 +
node_modules/lodash/_mapToArray.js | 18 +
.../lodash/_matchesStrictComparable.js | 20 +
node_modules/lodash/_mergeData.js | 90 +
node_modules/lodash/_mergeDefaults.js | 24 +
node_modules/lodash/_metaMap.js | 6 +
node_modules/lodash/_nativeCreate.js | 6 +
node_modules/lodash/_parent.js | 16 +
node_modules/lodash/_reEscape.js | 4 +
node_modules/lodash/_reEvaluate.js | 4 +
node_modules/lodash/_reHasComplexSymbol.js | 13 +
node_modules/lodash/_reInterpolate.js | 4 +
node_modules/lodash/_realNames.js | 4 +
node_modules/lodash/_reorder.js | 29 +
node_modules/lodash/_replaceHolders.js | 29 +
node_modules/lodash/_root.js | 41 +
node_modules/lodash/_setCacheAdd.js | 19 +
node_modules/lodash/_setCacheHas.js | 14 +
node_modules/lodash/_setData.js | 42 +
node_modules/lodash/_setToArray.js | 18 +
node_modules/lodash/_setToPairs.js | 18 +
node_modules/lodash/_stackClear.js | 14 +
node_modules/lodash/_stackDelete.js | 14 +
node_modules/lodash/_stackGet.js | 14 +
node_modules/lodash/_stackHas.js | 14 +
node_modules/lodash/_stackSet.js | 26 +
node_modules/lodash/_stringSize.js | 47 +
node_modules/lodash/_stringToArray.js | 38 +
node_modules/lodash/_stringToPath.js | 25 +
node_modules/lodash/_toKey.js | 21 +
node_modules/lodash/_toSource.js | 23 +
node_modules/lodash/_unescapeHtmlChar.js | 22 +
node_modules/lodash/_wrapperClone.js | 23 +
node_modules/lodash/add.js | 22 +
node_modules/lodash/after.js | 42 +
node_modules/lodash/array.js | 67 +
node_modules/lodash/ary.js | 29 +
node_modules/lodash/assign.js | 64 +
node_modules/lodash/assignIn.js | 58 +
node_modules/lodash/assignInWith.js | 38 +
node_modules/lodash/assignWith.js | 37 +
node_modules/lodash/at.js | 29 +
node_modules/lodash/attempt.js | 35 +
node_modules/lodash/before.js | 40 +
node_modules/lodash/bind.js | 57 +
node_modules/lodash/bindAll.js | 41 +
node_modules/lodash/bindKey.js | 68 +
node_modules/lodash/camelCase.js | 29 +
node_modules/lodash/capitalize.js | 23 +
node_modules/lodash/castArray.js | 44 +
node_modules/lodash/ceil.js | 26 +
node_modules/lodash/chain.js | 38 +
node_modules/lodash/chunk.js | 50 +
node_modules/lodash/clamp.js | 39 +
node_modules/lodash/clone.js | 33 +
node_modules/lodash/cloneDeep.js | 25 +
node_modules/lodash/cloneDeepWith.js | 35 +
node_modules/lodash/cloneWith.js | 38 +
node_modules/lodash/collection.js | 31 +
node_modules/lodash/commit.js | 33 +
node_modules/lodash/compact.js | 31 +
node_modules/lodash/concat.js | 42 +
node_modules/lodash/cond.js | 60 +
node_modules/lodash/conforms.js | 29 +
node_modules/lodash/constant.js | 24 +
node_modules/lodash/core.js | 3926 +
node_modules/lodash/core.min.js | 28 +
node_modules/lodash/countBy.js | 35 +
node_modules/lodash/create.js | 43 +
node_modules/lodash/curry.js | 57 +
node_modules/lodash/curryRight.js | 54 +
node_modules/lodash/date.js | 3 +
node_modules/lodash/debounce.js | 186 +
node_modules/lodash/deburr.js | 42 +
node_modules/lodash/defaults.js | 32 +
node_modules/lodash/defaultsDeep.js | 31 +
node_modules/lodash/defer.js | 26 +
node_modules/lodash/delay.js | 28 +
node_modules/lodash/difference.js | 31 +
node_modules/lodash/differenceBy.js | 42 +
node_modules/lodash/differenceWith.js | 38 +
node_modules/lodash/divide.js | 22 +
node_modules/lodash/drop.js | 38 +
node_modules/lodash/dropRight.js | 39 +
node_modules/lodash/dropRightWhile.js | 46 +
node_modules/lodash/dropWhile.js | 46 +
node_modules/lodash/each.js | 1 +
node_modules/lodash/eachRight.js | 1 +
node_modules/lodash/endsWith.js | 42 +
node_modules/lodash/entries.js | 1 +
node_modules/lodash/entriesIn.js | 1 +
node_modules/lodash/eq.js | 37 +
node_modules/lodash/escape.js | 49 +
node_modules/lodash/escapeRegExp.js | 32 +
node_modules/lodash/every.js | 52 +
node_modules/lodash/extend.js | 1 +
node_modules/lodash/extendWith.js | 1 +
node_modules/lodash/fill.js | 45 +
node_modules/lodash/filter.js | 47 +
node_modules/lodash/find.js | 52 +
node_modules/lodash/findIndex.js | 45 +
node_modules/lodash/findKey.js | 45 +
node_modules/lodash/findLast.js | 35 +
node_modules/lodash/findLastIndex.js | 45 +
node_modules/lodash/findLastKey.js | 45 +
node_modules/lodash/first.js | 1 +
node_modules/lodash/flatMap.js | 30 +
node_modules/lodash/flatMapDeep.js | 32 +
node_modules/lodash/flatMapDepth.js | 32 +
node_modules/lodash/flatten.js | 22 +
node_modules/lodash/flattenDeep.js | 25 +
node_modules/lodash/flattenDepth.js | 33 +
node_modules/lodash/flip.js | 28 +
node_modules/lodash/floor.js | 26 +
node_modules/lodash/flow.js | 27 +
node_modules/lodash/flowRight.js | 26 +
node_modules/lodash/forEach.js | 41 +
node_modules/lodash/forEachRight.js | 31 +
node_modules/lodash/forIn.js | 39 +
node_modules/lodash/forInRight.js | 37 +
node_modules/lodash/forOwn.js | 36 +
node_modules/lodash/forOwnRight.js | 34 +
node_modules/lodash/fp.js | 2 +
node_modules/lodash/fp/__.js | 1 +
node_modules/lodash/fp/_baseConvert.js | 466 +
node_modules/lodash/fp/_convertBrowser.js | 18 +
node_modules/lodash/fp/_falseOptions.js | 7 +
node_modules/lodash/fp/_mapping.js | 290 +
node_modules/lodash/fp/_util.js | 14 +
node_modules/lodash/fp/add.js | 5 +
node_modules/lodash/fp/after.js | 5 +
node_modules/lodash/fp/all.js | 1 +
node_modules/lodash/fp/allPass.js | 1 +
node_modules/lodash/fp/always.js | 1 +
node_modules/lodash/fp/any.js | 1 +
node_modules/lodash/fp/anyPass.js | 1 +
node_modules/lodash/fp/apply.js | 1 +
node_modules/lodash/fp/array.js | 2 +
node_modules/lodash/fp/ary.js | 5 +
node_modules/lodash/fp/assign.js | 5 +
node_modules/lodash/fp/assignIn.js | 5 +
node_modules/lodash/fp/assignInWith.js | 5 +
node_modules/lodash/fp/assignWith.js | 5 +
node_modules/lodash/fp/assoc.js | 1 +
node_modules/lodash/fp/assocPath.js | 1 +
node_modules/lodash/fp/at.js | 5 +
node_modules/lodash/fp/attempt.js | 5 +
node_modules/lodash/fp/before.js | 5 +
node_modules/lodash/fp/bind.js | 5 +
node_modules/lodash/fp/bindAll.js | 5 +
node_modules/lodash/fp/bindKey.js | 5 +
node_modules/lodash/fp/camelCase.js | 5 +
node_modules/lodash/fp/capitalize.js | 5 +
node_modules/lodash/fp/castArray.js | 5 +
node_modules/lodash/fp/ceil.js | 5 +
node_modules/lodash/fp/chain.js | 5 +
node_modules/lodash/fp/chunk.js | 5 +
node_modules/lodash/fp/clamp.js | 5 +
node_modules/lodash/fp/clone.js | 5 +
node_modules/lodash/fp/cloneDeep.js | 5 +
node_modules/lodash/fp/cloneDeepWith.js | 5 +
node_modules/lodash/fp/cloneWith.js | 5 +
node_modules/lodash/fp/collection.js | 2 +
node_modules/lodash/fp/commit.js | 5 +
node_modules/lodash/fp/compact.js | 5 +
node_modules/lodash/fp/complement.js | 1 +
node_modules/lodash/fp/compose.js | 1 +
node_modules/lodash/fp/concat.js | 5 +
node_modules/lodash/fp/cond.js | 5 +
node_modules/lodash/fp/conforms.js | 5 +
node_modules/lodash/fp/constant.js | 5 +
node_modules/lodash/fp/contains.js | 1 +
node_modules/lodash/fp/convert.js | 18 +
node_modules/lodash/fp/countBy.js | 5 +
node_modules/lodash/fp/create.js | 5 +
node_modules/lodash/fp/curry.js | 5 +
node_modules/lodash/fp/curryN.js | 5 +
node_modules/lodash/fp/curryRight.js | 5 +
node_modules/lodash/fp/curryRightN.js | 5 +
node_modules/lodash/fp/date.js | 2 +
node_modules/lodash/fp/debounce.js | 5 +
node_modules/lodash/fp/deburr.js | 5 +
node_modules/lodash/fp/defaults.js | 5 +
node_modules/lodash/fp/defaultsDeep.js | 5 +
node_modules/lodash/fp/defer.js | 5 +
node_modules/lodash/fp/delay.js | 5 +
node_modules/lodash/fp/difference.js | 5 +
node_modules/lodash/fp/differenceBy.js | 5 +
node_modules/lodash/fp/differenceWith.js | 5 +
node_modules/lodash/fp/dissoc.js | 1 +
node_modules/lodash/fp/dissocPath.js | 1 +
node_modules/lodash/fp/divide.js | 5 +
node_modules/lodash/fp/drop.js | 5 +
node_modules/lodash/fp/dropRight.js | 5 +
node_modules/lodash/fp/dropRightWhile.js | 5 +
node_modules/lodash/fp/dropWhile.js | 5 +
node_modules/lodash/fp/each.js | 1 +
node_modules/lodash/fp/eachRight.js | 1 +
node_modules/lodash/fp/endsWith.js | 5 +
node_modules/lodash/fp/entries.js | 1 +
node_modules/lodash/fp/entriesIn.js | 1 +
node_modules/lodash/fp/eq.js | 5 +
node_modules/lodash/fp/equals.js | 1 +
node_modules/lodash/fp/escape.js | 5 +
node_modules/lodash/fp/escapeRegExp.js | 5 +
node_modules/lodash/fp/every.js | 5 +
node_modules/lodash/fp/extend.js | 1 +
node_modules/lodash/fp/extendWith.js | 1 +
node_modules/lodash/fp/fill.js | 5 +
node_modules/lodash/fp/filter.js | 5 +
node_modules/lodash/fp/find.js | 5 +
node_modules/lodash/fp/findIndex.js | 5 +
node_modules/lodash/fp/findKey.js | 5 +
node_modules/lodash/fp/findLast.js | 5 +
node_modules/lodash/fp/findLastIndex.js | 5 +
node_modules/lodash/fp/findLastKey.js | 5 +
node_modules/lodash/fp/first.js | 1 +
node_modules/lodash/fp/flatMap.js | 5 +
node_modules/lodash/fp/flatMapDeep.js | 5 +
node_modules/lodash/fp/flatMapDepth.js | 5 +
node_modules/lodash/fp/flatten.js | 5 +
node_modules/lodash/fp/flattenDeep.js | 5 +
node_modules/lodash/fp/flattenDepth.js | 5 +
node_modules/lodash/fp/flip.js | 5 +
node_modules/lodash/fp/floor.js | 5 +
node_modules/lodash/fp/flow.js | 5 +
node_modules/lodash/fp/flowRight.js | 5 +
node_modules/lodash/fp/forEach.js | 5 +
node_modules/lodash/fp/forEachRight.js | 5 +
node_modules/lodash/fp/forIn.js | 5 +
node_modules/lodash/fp/forInRight.js | 5 +
node_modules/lodash/fp/forOwn.js | 5 +
node_modules/lodash/fp/forOwnRight.js | 5 +
node_modules/lodash/fp/fromPairs.js | 5 +
node_modules/lodash/fp/function.js | 2 +
node_modules/lodash/fp/functions.js | 5 +
node_modules/lodash/fp/functionsIn.js | 5 +
node_modules/lodash/fp/get.js | 5 +
node_modules/lodash/fp/getOr.js | 5 +
node_modules/lodash/fp/groupBy.js | 5 +
node_modules/lodash/fp/gt.js | 5 +
node_modules/lodash/fp/gte.js | 5 +
node_modules/lodash/fp/has.js | 5 +
node_modules/lodash/fp/hasIn.js | 5 +
node_modules/lodash/fp/head.js | 5 +
node_modules/lodash/fp/identical.js | 1 +
node_modules/lodash/fp/identity.js | 5 +
node_modules/lodash/fp/inRange.js | 5 +
node_modules/lodash/fp/includes.js | 5 +
node_modules/lodash/fp/indexOf.js | 5 +
node_modules/lodash/fp/init.js | 1 +
node_modules/lodash/fp/initial.js | 5 +
node_modules/lodash/fp/intersection.js | 5 +
node_modules/lodash/fp/intersectionBy.js | 5 +
node_modules/lodash/fp/intersectionWith.js | 5 +
node_modules/lodash/fp/invert.js | 5 +
node_modules/lodash/fp/invertBy.js | 5 +
node_modules/lodash/fp/invertObj.js | 1 +
node_modules/lodash/fp/invoke.js | 5 +
node_modules/lodash/fp/invokeArgs.js | 5 +
node_modules/lodash/fp/invokeArgsMap.js | 5 +
node_modules/lodash/fp/invokeMap.js | 5 +
node_modules/lodash/fp/isArguments.js | 5 +
node_modules/lodash/fp/isArray.js | 5 +
node_modules/lodash/fp/isArrayBuffer.js | 5 +
node_modules/lodash/fp/isArrayLike.js | 5 +
node_modules/lodash/fp/isArrayLikeObject.js | 5 +
node_modules/lodash/fp/isBoolean.js | 5 +
node_modules/lodash/fp/isBuffer.js | 5 +
node_modules/lodash/fp/isDate.js | 5 +
node_modules/lodash/fp/isElement.js | 5 +
node_modules/lodash/fp/isEmpty.js | 5 +
node_modules/lodash/fp/isEqual.js | 5 +
node_modules/lodash/fp/isEqualWith.js | 5 +
node_modules/lodash/fp/isError.js | 5 +
node_modules/lodash/fp/isFinite.js | 5 +
node_modules/lodash/fp/isFunction.js | 5 +
node_modules/lodash/fp/isInteger.js | 5 +
node_modules/lodash/fp/isLength.js | 5 +
node_modules/lodash/fp/isMap.js | 5 +
node_modules/lodash/fp/isMatch.js | 5 +
node_modules/lodash/fp/isMatchWith.js | 5 +
node_modules/lodash/fp/isNaN.js | 5 +
node_modules/lodash/fp/isNative.js | 5 +
node_modules/lodash/fp/isNil.js | 5 +
node_modules/lodash/fp/isNull.js | 5 +
node_modules/lodash/fp/isNumber.js | 5 +
node_modules/lodash/fp/isObject.js | 5 +
node_modules/lodash/fp/isObjectLike.js | 5 +
node_modules/lodash/fp/isPlainObject.js | 5 +
node_modules/lodash/fp/isRegExp.js | 5 +
node_modules/lodash/fp/isSafeInteger.js | 5 +
node_modules/lodash/fp/isSet.js | 5 +
node_modules/lodash/fp/isString.js | 5 +
node_modules/lodash/fp/isSymbol.js | 5 +
node_modules/lodash/fp/isTypedArray.js | 5 +
node_modules/lodash/fp/isUndefined.js | 5 +
node_modules/lodash/fp/isWeakMap.js | 5 +
node_modules/lodash/fp/isWeakSet.js | 5 +
node_modules/lodash/fp/iteratee.js | 5 +
node_modules/lodash/fp/join.js | 5 +
node_modules/lodash/fp/juxt.js | 1 +
node_modules/lodash/fp/kebabCase.js | 5 +
node_modules/lodash/fp/keyBy.js | 5 +
node_modules/lodash/fp/keys.js | 5 +
node_modules/lodash/fp/keysIn.js | 5 +
node_modules/lodash/fp/lang.js | 2 +
node_modules/lodash/fp/last.js | 5 +
node_modules/lodash/fp/lastIndexOf.js | 5 +
node_modules/lodash/fp/lowerCase.js | 5 +
node_modules/lodash/fp/lowerFirst.js | 5 +
node_modules/lodash/fp/lt.js | 5 +
node_modules/lodash/fp/lte.js | 5 +
node_modules/lodash/fp/map.js | 5 +
node_modules/lodash/fp/mapKeys.js | 5 +
node_modules/lodash/fp/mapValues.js | 5 +
node_modules/lodash/fp/matches.js | 5 +
node_modules/lodash/fp/matchesProperty.js | 5 +
node_modules/lodash/fp/math.js | 2 +
node_modules/lodash/fp/max.js | 5 +
node_modules/lodash/fp/maxBy.js | 5 +
node_modules/lodash/fp/mean.js | 5 +
node_modules/lodash/fp/meanBy.js | 5 +
node_modules/lodash/fp/memoize.js | 5 +
node_modules/lodash/fp/merge.js | 5 +
node_modules/lodash/fp/mergeWith.js | 5 +
node_modules/lodash/fp/method.js | 5 +
node_modules/lodash/fp/methodOf.js | 5 +
node_modules/lodash/fp/min.js | 5 +
node_modules/lodash/fp/minBy.js | 5 +
node_modules/lodash/fp/mixin.js | 5 +
node_modules/lodash/fp/multiply.js | 5 +
node_modules/lodash/fp/nAry.js | 1 +
node_modules/lodash/fp/negate.js | 5 +
node_modules/lodash/fp/next.js | 5 +
node_modules/lodash/fp/noop.js | 5 +
node_modules/lodash/fp/now.js | 5 +
node_modules/lodash/fp/nth.js | 5 +
node_modules/lodash/fp/nthArg.js | 5 +
node_modules/lodash/fp/number.js | 2 +
node_modules/lodash/fp/object.js | 2 +
node_modules/lodash/fp/omit.js | 5 +
node_modules/lodash/fp/omitAll.js | 1 +
node_modules/lodash/fp/omitBy.js | 5 +
node_modules/lodash/fp/once.js | 5 +
node_modules/lodash/fp/orderBy.js | 5 +
node_modules/lodash/fp/over.js | 5 +
node_modules/lodash/fp/overArgs.js | 5 +
node_modules/lodash/fp/overEvery.js | 5 +
node_modules/lodash/fp/overSome.js | 5 +
node_modules/lodash/fp/pad.js | 5 +
node_modules/lodash/fp/padChars.js | 5 +
node_modules/lodash/fp/padCharsEnd.js | 5 +
node_modules/lodash/fp/padCharsStart.js | 5 +
node_modules/lodash/fp/padEnd.js | 5 +
node_modules/lodash/fp/padStart.js | 5 +
node_modules/lodash/fp/parseInt.js | 5 +
node_modules/lodash/fp/partial.js | 5 +
node_modules/lodash/fp/partialRight.js | 5 +
node_modules/lodash/fp/partition.js | 5 +
node_modules/lodash/fp/path.js | 1 +
node_modules/lodash/fp/pathEq.js | 1 +
node_modules/lodash/fp/pathOr.js | 1 +
node_modules/lodash/fp/paths.js | 1 +
node_modules/lodash/fp/pick.js | 5 +
node_modules/lodash/fp/pickAll.js | 1 +
node_modules/lodash/fp/pickBy.js | 5 +
node_modules/lodash/fp/pipe.js | 1 +
node_modules/lodash/fp/placeholder.js | 6 +
node_modules/lodash/fp/plant.js | 5 +
node_modules/lodash/fp/pluck.js | 1 +
node_modules/lodash/fp/prop.js | 1 +
node_modules/lodash/fp/propEq.js | 1 +
node_modules/lodash/fp/propOr.js | 1 +
node_modules/lodash/fp/property.js | 5 +
node_modules/lodash/fp/propertyOf.js | 5 +
node_modules/lodash/fp/props.js | 1 +
node_modules/lodash/fp/pull.js | 5 +
node_modules/lodash/fp/pullAll.js | 5 +
node_modules/lodash/fp/pullAllBy.js | 5 +
node_modules/lodash/fp/pullAllWith.js | 5 +
node_modules/lodash/fp/pullAt.js | 5 +
node_modules/lodash/fp/random.js | 5 +
node_modules/lodash/fp/range.js | 5 +
node_modules/lodash/fp/rangeRight.js | 5 +
node_modules/lodash/fp/rearg.js | 5 +
node_modules/lodash/fp/reduce.js | 5 +
node_modules/lodash/fp/reduceRight.js | 5 +
node_modules/lodash/fp/reject.js | 5 +
node_modules/lodash/fp/remove.js | 5 +
node_modules/lodash/fp/repeat.js | 5 +
node_modules/lodash/fp/replace.js | 5 +
node_modules/lodash/fp/rest.js | 5 +
node_modules/lodash/fp/restFrom.js | 5 +
node_modules/lodash/fp/result.js | 5 +
node_modules/lodash/fp/reverse.js | 5 +
node_modules/lodash/fp/round.js | 5 +
node_modules/lodash/fp/sample.js | 5 +
node_modules/lodash/fp/sampleSize.js | 5 +
node_modules/lodash/fp/seq.js | 2 +
node_modules/lodash/fp/set.js | 5 +
node_modules/lodash/fp/setWith.js | 5 +
node_modules/lodash/fp/shuffle.js | 5 +
node_modules/lodash/fp/size.js | 5 +
node_modules/lodash/fp/slice.js | 5 +
node_modules/lodash/fp/snakeCase.js | 5 +
node_modules/lodash/fp/some.js | 5 +
node_modules/lodash/fp/sortBy.js | 5 +
node_modules/lodash/fp/sortedIndex.js | 5 +
node_modules/lodash/fp/sortedIndexBy.js | 5 +
node_modules/lodash/fp/sortedIndexOf.js | 5 +
node_modules/lodash/fp/sortedLastIndex.js | 5 +
node_modules/lodash/fp/sortedLastIndexBy.js | 5 +
node_modules/lodash/fp/sortedLastIndexOf.js | 5 +
node_modules/lodash/fp/sortedUniq.js | 5 +
node_modules/lodash/fp/sortedUniqBy.js | 5 +
node_modules/lodash/fp/split.js | 5 +
node_modules/lodash/fp/spread.js | 5 +
node_modules/lodash/fp/spreadFrom.js | 5 +
node_modules/lodash/fp/startCase.js | 5 +
node_modules/lodash/fp/startsWith.js | 5 +
node_modules/lodash/fp/string.js | 2 +
node_modules/lodash/fp/subtract.js | 5 +
node_modules/lodash/fp/sum.js | 5 +
node_modules/lodash/fp/sumBy.js | 5 +
node_modules/lodash/fp/tail.js | 5 +
node_modules/lodash/fp/take.js | 5 +
node_modules/lodash/fp/takeRight.js | 5 +
node_modules/lodash/fp/takeRightWhile.js | 5 +
node_modules/lodash/fp/takeWhile.js | 5 +
node_modules/lodash/fp/tap.js | 5 +
node_modules/lodash/fp/template.js | 5 +
node_modules/lodash/fp/templateSettings.js | 5 +
node_modules/lodash/fp/throttle.js | 5 +
node_modules/lodash/fp/thru.js | 5 +
node_modules/lodash/fp/times.js | 5 +
node_modules/lodash/fp/toArray.js | 5 +
node_modules/lodash/fp/toFinite.js | 5 +
node_modules/lodash/fp/toInteger.js | 5 +
node_modules/lodash/fp/toIterator.js | 5 +
node_modules/lodash/fp/toJSON.js | 5 +
node_modules/lodash/fp/toLength.js | 5 +
node_modules/lodash/fp/toLower.js | 5 +
node_modules/lodash/fp/toNumber.js | 5 +
node_modules/lodash/fp/toPairs.js | 5 +
node_modules/lodash/fp/toPairsIn.js | 5 +
node_modules/lodash/fp/toPath.js | 5 +
node_modules/lodash/fp/toPlainObject.js | 5 +
node_modules/lodash/fp/toSafeInteger.js | 5 +
node_modules/lodash/fp/toString.js | 5 +
node_modules/lodash/fp/toUpper.js | 5 +
node_modules/lodash/fp/transform.js | 5 +
node_modules/lodash/fp/trim.js | 5 +
node_modules/lodash/fp/trimChars.js | 5 +
node_modules/lodash/fp/trimCharsEnd.js | 5 +
node_modules/lodash/fp/trimCharsStart.js | 5 +
node_modules/lodash/fp/trimEnd.js | 5 +
node_modules/lodash/fp/trimStart.js | 5 +
node_modules/lodash/fp/truncate.js | 5 +
node_modules/lodash/fp/unapply.js | 1 +
node_modules/lodash/fp/unary.js | 5 +
node_modules/lodash/fp/unescape.js | 5 +
node_modules/lodash/fp/union.js | 5 +
node_modules/lodash/fp/unionBy.js | 5 +
node_modules/lodash/fp/unionWith.js | 5 +
node_modules/lodash/fp/uniq.js | 5 +
node_modules/lodash/fp/uniqBy.js | 5 +
node_modules/lodash/fp/uniqWith.js | 5 +
node_modules/lodash/fp/uniqueId.js | 5 +
node_modules/lodash/fp/unnest.js | 1 +
node_modules/lodash/fp/unset.js | 5 +
node_modules/lodash/fp/unzip.js | 5 +
node_modules/lodash/fp/unzipWith.js | 5 +
node_modules/lodash/fp/update.js | 5 +
node_modules/lodash/fp/updateWith.js | 5 +
node_modules/lodash/fp/upperCase.js | 5 +
node_modules/lodash/fp/upperFirst.js | 5 +
node_modules/lodash/fp/useWith.js | 1 +
node_modules/lodash/fp/util.js | 2 +
node_modules/lodash/fp/value.js | 5 +
node_modules/lodash/fp/valueOf.js | 5 +
node_modules/lodash/fp/values.js | 5 +
node_modules/lodash/fp/valuesIn.js | 5 +
node_modules/lodash/fp/whereEq.js | 1 +
node_modules/lodash/fp/without.js | 5 +
node_modules/lodash/fp/words.js | 5 +
node_modules/lodash/fp/wrap.js | 5 +
node_modules/lodash/fp/wrapperAt.js | 5 +
node_modules/lodash/fp/wrapperChain.js | 5 +
node_modules/lodash/fp/wrapperLodash.js | 5 +
node_modules/lodash/fp/wrapperReverse.js | 5 +
node_modules/lodash/fp/wrapperValue.js | 5 +
node_modules/lodash/fp/xor.js | 5 +
node_modules/lodash/fp/xorBy.js | 5 +
node_modules/lodash/fp/xorWith.js | 5 +
node_modules/lodash/fp/zip.js | 5 +
node_modules/lodash/fp/zipObj.js | 1 +
node_modules/lodash/fp/zipObject.js | 5 +
node_modules/lodash/fp/zipObjectDeep.js | 5 +
node_modules/lodash/fp/zipWith.js | 5 +
node_modules/lodash/fromPairs.js | 28 +
node_modules/lodash/function.js | 25 +
node_modules/lodash/functions.js | 31 +
node_modules/lodash/functionsIn.js | 31 +
node_modules/lodash/get.js | 33 +
node_modules/lodash/groupBy.js | 41 +
node_modules/lodash/gt.js | 29 +
node_modules/lodash/gte.js | 30 +
node_modules/lodash/has.js | 35 +
node_modules/lodash/hasIn.js | 34 +
node_modules/lodash/head.js | 23 +
node_modules/lodash/identity.js | 21 +
node_modules/lodash/inRange.js | 54 +
node_modules/lodash/includes.js | 53 +
node_modules/lodash/index.js | 1 +
node_modules/lodash/indexOf.js | 42 +
node_modules/lodash/initial.js | 21 +
node_modules/lodash/intersection.js | 30 +
node_modules/lodash/intersectionBy.js | 45 +
node_modules/lodash/intersectionWith.js | 42 +
node_modules/lodash/invert.js | 27 +
node_modules/lodash/invertBy.js | 45 +
node_modules/lodash/invoke.js | 24 +
node_modules/lodash/invokeMap.js | 44 +
node_modules/lodash/isArguments.js | 46 +
node_modules/lodash/isArray.js | 28 +
node_modules/lodash/isArrayBuffer.js | 37 +
node_modules/lodash/isArrayLike.js | 34 +
node_modules/lodash/isArrayLikeObject.js | 33 +
node_modules/lodash/isBoolean.js | 39 +
node_modules/lodash/isBuffer.js | 49 +
node_modules/lodash/isDate.js | 38 +
node_modules/lodash/isElement.js | 26 +
node_modules/lodash/isEmpty.js | 80 +
node_modules/lodash/isEqual.js | 36 +
node_modules/lodash/isEqualWith.js | 42 +
node_modules/lodash/isError.js | 43 +
node_modules/lodash/isFinite.js | 37 +
node_modules/lodash/isFunction.js | 43 +
node_modules/lodash/isInteger.js | 33 +
node_modules/lodash/isLength.js | 36 +
node_modules/lodash/isMap.js | 29 +
node_modules/lodash/isMatch.js | 32 +
node_modules/lodash/isMatchWith.js | 41 +
node_modules/lodash/isNaN.js | 38 +
node_modules/lodash/isNative.js | 56 +
node_modules/lodash/isNil.js | 25 +
node_modules/lodash/isNull.js | 22 +
node_modules/lodash/isNumber.js | 48 +
node_modules/lodash/isObject.js | 31 +
node_modules/lodash/isObjectLike.js | 29 +
node_modules/lodash/isPlainObject.js | 70 +
node_modules/lodash/isRegExp.js | 38 +
node_modules/lodash/isSafeInteger.js | 38 +
node_modules/lodash/isSet.js | 29 +
node_modules/lodash/isString.js | 40 +
node_modules/lodash/isSymbol.js | 39 +
node_modules/lodash/isTypedArray.js | 80 +
node_modules/lodash/isUndefined.js | 22 +
node_modules/lodash/isWeakMap.js | 29 +
node_modules/lodash/isWeakSet.js | 38 +
node_modules/lodash/iteratee.js | 50 +
node_modules/lodash/join.js | 26 +
node_modules/lodash/kebabCase.js | 28 +
node_modules/lodash/keyBy.js | 36 +
node_modules/lodash/keys.js | 56 +
node_modules/lodash/keysIn.js | 55 +
node_modules/lodash/lang.js | 57 +
node_modules/lodash/last.js | 20 +
node_modules/lodash/lastIndexOf.js | 54 +
node_modules/lodash/lodash.js | 16242 ++
node_modules/lodash/lodash.min.js | 125 +
node_modules/lodash/lowerCase.js | 27 +
node_modules/lodash/lowerFirst.js | 22 +
node_modules/lodash/lt.js | 29 +
node_modules/lodash/lte.js | 30 +
node_modules/lodash/map.js | 54 +
node_modules/lodash/mapKeys.js | 36 +
node_modules/lodash/mapValues.js | 43 +
node_modules/lodash/matches.js | 32 +
node_modules/lodash/matchesProperty.js | 32 +
node_modules/lodash/math.js | 17 +
node_modules/lodash/max.js | 29 +
node_modules/lodash/maxBy.js | 35 +
node_modules/lodash/mean.js | 22 +
node_modules/lodash/meanBy.js | 32 +
node_modules/lodash/memoize.js | 73 +
node_modules/lodash/merge.js | 39 +
node_modules/lodash/mergeWith.js | 46 +
node_modules/lodash/method.js | 34 +
node_modules/lodash/methodOf.js | 33 +
node_modules/lodash/min.js | 29 +
node_modules/lodash/minBy.js | 35 +
node_modules/lodash/mixin.js | 74 +
node_modules/lodash/multiply.js | 22 +
node_modules/lodash/negate.js | 33 +
node_modules/lodash/next.js | 35 +
node_modules/lodash/noop.js | 20 +
node_modules/lodash/now.js | 20 +
node_modules/lodash/nth.js | 29 +
node_modules/lodash/nthArg.js | 32 +
node_modules/lodash/number.js | 5 +
node_modules/lodash/object.js | 48 +
node_modules/lodash/omit.js | 36 +
node_modules/lodash/omitBy.js | 32 +
node_modules/lodash/once.js | 25 +
node_modules/lodash/orderBy.js | 47 +
node_modules/lodash/over.js | 24 +
node_modules/lodash/overArgs.js | 62 +
node_modules/lodash/overEvery.js | 30 +
node_modules/lodash/overSome.js | 30 +
node_modules/lodash/package.json | 115 +
node_modules/lodash/pad.js | 49 +
node_modules/lodash/padEnd.js | 39 +
node_modules/lodash/padStart.js | 39 +
node_modules/lodash/parseInt.js | 49 +
node_modules/lodash/partial.js | 50 +
node_modules/lodash/partialRight.js | 49 +
node_modules/lodash/partition.js | 44 +
node_modules/lodash/pick.js | 28 +
node_modules/lodash/pickBy.js | 27 +
node_modules/lodash/plant.js | 48 +
node_modules/lodash/property.js | 32 +
node_modules/lodash/propertyOf.js | 30 +
node_modules/lodash/pull.js | 29 +
node_modules/lodash/pullAll.js | 29 +
node_modules/lodash/pullAllBy.js | 34 +
node_modules/lodash/pullAllWith.js | 32 +
node_modules/lodash/pullAt.js | 46 +
node_modules/lodash/random.js | 82 +
node_modules/lodash/range.js | 46 +
node_modules/lodash/rangeRight.js | 41 +
node_modules/lodash/rearg.js | 34 +
node_modules/lodash/reduce.js | 51 +
node_modules/lodash/reduceRight.js | 36 +
node_modules/lodash/reject.js | 49 +
node_modules/lodash/remove.js | 54 +
node_modules/lodash/repeat.js | 37 +
node_modules/lodash/replace.js | 35 +
node_modules/lodash/rest.js | 64 +
node_modules/lodash/result.js | 57 +
node_modules/lodash/reverse.js | 34 +
node_modules/lodash/round.js | 26 +
node_modules/lodash/sample.js | 26 +
node_modules/lodash/sampleSize.js | 49 +
node_modules/lodash/seq.js | 16 +
node_modules/lodash/set.js | 35 +
node_modules/lodash/setWith.js | 32 +
node_modules/lodash/shuffle.js | 25 +
node_modules/lodash/size.js | 50 +
node_modules/lodash/slice.js | 37 +
node_modules/lodash/snakeCase.js | 28 +
node_modules/lodash/some.js | 52 +
node_modules/lodash/sortBy.js | 59 +
node_modules/lodash/sortedIndex.js | 27 +
node_modules/lodash/sortedIndexBy.js | 34 +
node_modules/lodash/sortedIndexOf.js | 31 +
node_modules/lodash/sortedLastIndex.js | 25 +
node_modules/lodash/sortedLastIndexBy.js | 29 +
node_modules/lodash/sortedLastIndexOf.js | 31 +
node_modules/lodash/sortedUniq.js | 24 +
node_modules/lodash/sortedUniqBy.js | 26 +
node_modules/lodash/split.js | 58 +
node_modules/lodash/spread.js | 63 +
node_modules/lodash/startCase.js | 29 +
node_modules/lodash/startsWith.js | 35 +
node_modules/lodash/string.js | 33 +
node_modules/lodash/subtract.js | 22 +
node_modules/lodash/sum.js | 24 +
node_modules/lodash/sumBy.js | 34 +
node_modules/lodash/tail.js | 21 +
node_modules/lodash/take.js | 37 +
node_modules/lodash/takeRight.js | 39 +
node_modules/lodash/takeRightWhile.js | 46 +
node_modules/lodash/takeWhile.js | 46 +
node_modules/lodash/tap.js | 29 +
node_modules/lodash/template.js | 237 +
node_modules/lodash/templateSettings.js | 67 +
node_modules/lodash/throttle.js | 66 +
node_modules/lodash/thru.js | 28 +
node_modules/lodash/times.js | 51 +
node_modules/lodash/toArray.js | 58 +
node_modules/lodash/toFinite.js | 42 +
node_modules/lodash/toInteger.js | 36 +
node_modules/lodash/toIterator.js | 23 +
node_modules/lodash/toJSON.js | 1 +
node_modules/lodash/toLength.js | 38 +
node_modules/lodash/toLower.js | 28 +
node_modules/lodash/toNumber.js | 67 +
node_modules/lodash/toPairs.js | 30 +
node_modules/lodash/toPairsIn.js | 30 +
node_modules/lodash/toPath.js | 41 +
node_modules/lodash/toPlainObject.js | 32 +
node_modules/lodash/toSafeInteger.js | 35 +
node_modules/lodash/toString.js | 28 +
node_modules/lodash/toUpper.js | 28 +
node_modules/lodash/transform.js | 62 +
node_modules/lodash/trim.js | 49 +
node_modules/lodash/trimEnd.js | 43 +
node_modules/lodash/trimStart.js | 43 +
node_modules/lodash/truncate.js | 111 +
node_modules/lodash/unary.js | 22 +
node_modules/lodash/unescape.js | 34 +
node_modules/lodash/union.js | 26 +
node_modules/lodash/unionBy.js | 39 +
node_modules/lodash/unionWith.js | 35 +
node_modules/lodash/uniq.js | 26 +
node_modules/lodash/uniqBy.js | 32 +
node_modules/lodash/uniqWith.js | 28 +
node_modules/lodash/uniqueId.js | 28 +
node_modules/lodash/unset.js | 34 +
node_modules/lodash/unzip.js | 45 +
node_modules/lodash/unzipWith.js | 39 +
node_modules/lodash/update.js | 35 +
node_modules/lodash/updateWith.js | 33 +
node_modules/lodash/upperCase.js | 27 +
node_modules/lodash/upperFirst.js | 22 +
node_modules/lodash/util.js | 28 +
node_modules/lodash/value.js | 1 +
node_modules/lodash/valueOf.js | 1 +
node_modules/lodash/values.js | 34 +
node_modules/lodash/valuesIn.js | 32 +
node_modules/lodash/without.js | 29 +
node_modules/lodash/words.js | 89 +
node_modules/lodash/wrap.js | 31 +
node_modules/lodash/wrapperAt.js | 53 +
node_modules/lodash/wrapperChain.js | 34 +
node_modules/lodash/wrapperLodash.js | 145 +
node_modules/lodash/wrapperReverse.js | 44 +
node_modules/lodash/wrapperValue.js | 21 +
node_modules/lodash/xor.js | 28 +
node_modules/lodash/xorBy.js | 39 +
node_modules/lodash/xorWith.js | 35 +
node_modules/lodash/zip.js | 22 +
node_modules/lodash/zipObject.js | 24 +
node_modules/lodash/zipObjectDeep.js | 23 +
node_modules/lodash/zipWith.js | 31 +
node_modules/longest/LICENSE | 21 +
node_modules/longest/README.md | 65 +
node_modules/longest/index.js | 37 +
node_modules/longest/package.json | 104 +
node_modules/lru-cache/LICENSE | 15 +
node_modules/lru-cache/README.md | 148 +
node_modules/lru-cache/lib/lru-cache.js | 469 +
node_modules/lru-cache/package.json | 103 +
node_modules/lru-queue/.lint | 11 +
node_modules/lru-queue/.npmignore | 4 +
node_modules/lru-queue/.travis.yml | 9 +
node_modules/lru-queue/CHANGES | 3 +
node_modules/lru-queue/LICENCE | 19 +
node_modules/lru-queue/README.md | 65 +
node_modules/lru-queue/index.js | 48 +
node_modules/lru-queue/package.json | 87 +
node_modules/lru-queue/test/index.js | 29 +
node_modules/map-cache/LICENSE | 21 +
node_modules/map-cache/README.md | 145 +
node_modules/map-cache/index.js | 100 +
node_modules/map-cache/package.json | 126 +
node_modules/media-typer/HISTORY.md | 22 +
node_modules/media-typer/LICENSE | 22 +
node_modules/media-typer/README.md | 81 +
node_modules/media-typer/index.js | 270 +
node_modules/media-typer/package.json | 92 +
node_modules/memoizee/.lint | 25 +
node_modules/memoizee/.npmignore | 4 +
node_modules/memoizee/.testignore | 1 +
node_modules/memoizee/.travis.yml | 25 +
node_modules/memoizee/.vscode/settings.json | 3 +
node_modules/memoizee/CHANGES | 122 +
node_modules/memoizee/LICENSE | 21 +
node_modules/memoizee/README.md | 427 +
node_modules/memoizee/benchmark/fibonacci.js | 124 +
node_modules/memoizee/ext/async.js | 149 +
node_modules/memoizee/ext/dispose.js | 27 +
node_modules/memoizee/ext/max-age.js | 87 +
node_modules/memoizee/ext/max.js | 27 +
node_modules/memoizee/ext/promise.js | 109 +
node_modules/memoizee/ext/ref-counter.js | 40 +
node_modules/memoizee/index.js | 36 +
node_modules/memoizee/lib/configure-map.js | 159 +
node_modules/memoizee/lib/methods.js | 28 +
.../memoizee/lib/registered-extensions.js | 1 +
node_modules/memoizee/lib/resolve-length.js | 15 +
.../memoizee/lib/resolve-normalize.js | 17 +
node_modules/memoizee/lib/resolve-resolve.js | 21 +
node_modules/memoizee/lib/weak.js | 113 +
node_modules/memoizee/methods-plain.js | 3 +
node_modules/memoizee/methods.js | 3 +
node_modules/memoizee/normalizers/get-1.js | 29 +
.../memoizee/normalizers/get-fixed.js | 71 +
.../normalizers/get-primitive-fixed.js | 12 +
node_modules/memoizee/normalizers/get.js | 88 +
.../memoizee/normalizers/primitive.js | 9 +
node_modules/memoizee/package.json | 118 +
node_modules/memoizee/plain.js | 39 +
node_modules/memoizee/profile.js | 78 +
node_modules/memoizee/test/ext/async.js | 277 +
node_modules/memoizee/test/ext/dispose.js | 233 +
node_modules/memoizee/test/ext/max-age.js | 618 +
node_modules/memoizee/test/ext/max.js | 584 +
node_modules/memoizee/test/ext/promise.js | 278 +
node_modules/memoizee/test/ext/ref-counter.js | 292 +
node_modules/memoizee/test/index.js | 1357 +
.../memoizee/test/lib/configure-map.js | 94 +
node_modules/memoizee/test/lib/methods.js | 36 +
.../test/lib/registered-extensions.js | 6 +
.../memoizee/test/lib/resolve-length.js | 10 +
.../memoizee/test/lib/resolve-normalize.js | 7 +
.../memoizee/test/lib/resolve-resolve.js | 5 +
node_modules/memoizee/test/lib/weak.js | 39 +
node_modules/memoizee/test/methods-plain.js | 34 +
node_modules/memoizee/test/methods.js | 31 +
.../memoizee/test/normalizers/get-1.js | 56 +
.../memoizee/test/normalizers/get-fixed.js | 91 +
.../test/normalizers/get-primitive-fixed.js | 43 +
node_modules/memoizee/test/normalizers/get.js | 59 +
.../memoizee/test/normalizers/primitive.js | 18 +
node_modules/memoizee/test/plain.js | 29 +
node_modules/memoizee/test/profile.js | 11 +
node_modules/memoizee/test/weak-plain.js | 36 +
node_modules/memoizee/test/weak.js | 33 +
node_modules/memoizee/weak-plain.js | 3 +
node_modules/memoizee/weak.js | 3 +
node_modules/merge-descriptors/HISTORY.md | 21 +
node_modules/merge-descriptors/LICENSE | 23 +
node_modules/merge-descriptors/README.md | 48 +
node_modules/merge-descriptors/index.js | 60 +
node_modules/merge-descriptors/package.json | 172 +
node_modules/methods/HISTORY.md | 29 +
node_modules/methods/LICENSE | 24 +
node_modules/methods/README.md | 51 +
node_modules/methods/index.js | 69 +
node_modules/methods/package.json | 122 +
node_modules/micromatch/LICENSE | 21 +
node_modules/micromatch/README.md | 689 +
node_modules/micromatch/index.js | 431 +
node_modules/micromatch/lib/chars.js | 67 +
node_modules/micromatch/lib/expand.js | 304 +
node_modules/micromatch/lib/glob.js | 193 +
node_modules/micromatch/lib/utils.js | 149 +
node_modules/micromatch/package.json | 188 +
node_modules/mime-db/HISTORY.md | 412 +
node_modules/mime-db/LICENSE | 22 +
node_modules/mime-db/README.md | 82 +
node_modules/mime-db/db.json | 6805 +
node_modules/mime-db/index.js | 11 +
node_modules/mime-db/package.json | 138 +
node_modules/mime-types/HISTORY.md | 223 +
node_modules/mime-types/LICENSE | 23 +
node_modules/mime-types/README.md | 108 +
node_modules/mime-types/index.js | 188 +
node_modules/mime-types/package.json | 128 +
node_modules/mime/.npmignore | 0
node_modules/mime/LICENSE | 19 +
node_modules/mime/README.md | 90 +
node_modules/mime/build/build.js | 11 +
node_modules/mime/build/test.js | 57 +
node_modules/mime/cli.js | 8 +
node_modules/mime/mime.js | 108 +
node_modules/mime/package.json | 106 +
node_modules/mime/types.json | 1 +
node_modules/minimatch/LICENSE | 15 +
node_modules/minimatch/README.md | 216 +
node_modules/minimatch/browser.js | 1159 +
node_modules/minimatch/minimatch.js | 912 +
node_modules/minimatch/package.json | 98 +
node_modules/minimist/.travis.yml | 4 +
node_modules/minimist/LICENSE | 18 +
node_modules/minimist/example/parse.js | 2 +
node_modules/minimist/index.js | 187 +
node_modules/minimist/package.json | 101 +
node_modules/minimist/readme.markdown | 73 +
node_modules/minimist/test/dash.js | 24 +
node_modules/minimist/test/default_bool.js | 20 +
node_modules/minimist/test/dotted.js | 16 +
node_modules/minimist/test/long.js | 31 +
node_modules/minimist/test/parse.js | 318 +
node_modules/minimist/test/parse_modified.js | 9 +
node_modules/minimist/test/short.js | 67 +
node_modules/minimist/test/whitespace.js | 8 +
node_modules/mkdirp/.travis.yml | 8 +
node_modules/mkdirp/LICENSE | 21 +
node_modules/mkdirp/bin/cmd.js | 33 +
node_modules/mkdirp/bin/usage.txt | 12 +
node_modules/mkdirp/examples/pow.js | 6 +
node_modules/mkdirp/index.js | 98 +
node_modules/mkdirp/package.json | 93 +
node_modules/mkdirp/readme.markdown | 100 +
node_modules/mkdirp/test/chmod.js | 41 +
node_modules/mkdirp/test/clobber.js | 38 +
node_modules/mkdirp/test/mkdirp.js | 28 +
node_modules/mkdirp/test/opts_fs.js | 29 +
node_modules/mkdirp/test/opts_fs_sync.js | 27 +
node_modules/mkdirp/test/perm.js | 32 +
node_modules/mkdirp/test/perm_sync.js | 36 +
node_modules/mkdirp/test/race.js | 37 +
node_modules/mkdirp/test/rel.js | 32 +
node_modules/mkdirp/test/return.js | 25 +
node_modules/mkdirp/test/return_sync.js | 24 +
node_modules/mkdirp/test/root.js | 19 +
node_modules/mkdirp/test/sync.js | 32 +
node_modules/mkdirp/test/umask.js | 28 +
node_modules/mkdirp/test/umask_sync.js | 32 +
node_modules/moment-timezone/.npmignore | 19 +
node_modules/moment-timezone/LICENSE | 20 +
node_modules/moment-timezone/README.md | 36 +
.../moment-timezone-with-data-2012-2022.js | 1201 +
...moment-timezone-with-data-2012-2022.min.js | 7 +
.../builds/moment-timezone-with-data.js | 1201 +
.../builds/moment-timezone-with-data.min.js | 7 +
.../builds/moment-timezone.min.js | 6 +
node_modules/moment-timezone/changelog.md | 139 +
node_modules/moment-timezone/composer.json | 43 +
.../moment-timezone/data/meta/latest.json | 5102 +
.../moment-timezone/data/packed/latest.json | 600 +
.../moment-timezone/data/unpacked/latest.json | 125366 +++++++++++++++
node_modules/moment-timezone/index.js | 2 +
.../moment-timezone/moment-timezone-utils.js | 316 +
.../moment-timezone/moment-timezone.js | 601 +
node_modules/moment-timezone/package.json | 128 +
node_modules/moment/CHANGELOG.md | 766 +
node_modules/moment/LICENSE | 22 +
node_modules/moment/README.md | 58 +
node_modules/moment/ender.js | 1 +
node_modules/moment/locale/af.js | 73 +
node_modules/moment/locale/ar-dz.js | 59 +
node_modules/moment/locale/ar-kw.js | 59 +
node_modules/moment/locale/ar-ly.js | 126 +
node_modules/moment/locale/ar-ma.js | 60 +
node_modules/moment/locale/ar-sa.js | 105 +
node_modules/moment/locale/ar-tn.js | 59 +
node_modules/moment/locale/ar.js | 142 +
node_modules/moment/locale/az.js | 105 +
node_modules/moment/locale/be.js | 134 +
node_modules/moment/locale/bg.js | 90 +
node_modules/moment/locale/bn.js | 119 +
node_modules/moment/locale/bo.js | 119 +
node_modules/moment/locale/br.js | 108 +
node_modules/moment/locale/bs.js | 143 +
node_modules/moment/locale/ca.js | 88 +
node_modules/moment/locale/cs.js | 172 +
node_modules/moment/locale/cv.js | 63 +
node_modules/moment/locale/cy.js | 81 +
node_modules/moment/locale/da.js | 60 +
node_modules/moment/locale/de-at.js | 79 +
node_modules/moment/locale/de-ch.js | 78 +
node_modules/moment/locale/de.js | 78 +
node_modules/moment/locale/dv.js | 100 +
node_modules/moment/locale/el.js | 100 +
node_modules/moment/locale/en-au.js | 67 +
node_modules/moment/locale/en-ca.js | 63 +
node_modules/moment/locale/en-gb.js | 67 +
node_modules/moment/locale/en-ie.js | 67 +
node_modules/moment/locale/en-nz.js | 67 +
node_modules/moment/locale/eo.js | 73 +
node_modules/moment/locale/es-do.js | 82 +
node_modules/moment/locale/es.js | 83 +
node_modules/moment/locale/et.js | 80 +
node_modules/moment/locale/eu.js | 66 +
node_modules/moment/locale/fa.js | 107 +
node_modules/moment/locale/fi.js | 107 +
node_modules/moment/locale/fo.js | 60 +
node_modules/moment/locale/fr-ca.js | 74 +
node_modules/moment/locale/fr-ch.js | 78 +
node_modules/moment/locale/fr.js | 83 +
node_modules/moment/locale/fy.js | 75 +
node_modules/moment/locale/gd.js | 76 +
node_modules/moment/locale/gl.js | 77 +
node_modules/moment/locale/gom-latn.js | 122 +
node_modules/moment/locale/he.js | 99 +
node_modules/moment/locale/hi.js | 124 +
node_modules/moment/locale/hr.js | 145 +
node_modules/moment/locale/hu.js | 109 +
node_modules/moment/locale/hy-am.js | 95 +
node_modules/moment/locale/id.js | 83 +
node_modules/moment/locale/is.js | 127 +
node_modules/moment/locale/it.js | 70 +
node_modules/moment/locale/ja.js | 80 +
node_modules/moment/locale/jv.js | 83 +
node_modules/moment/locale/ka.js | 89 +
node_modules/moment/locale/kk.js | 87 +
node_modules/moment/locale/km.js | 58 +
node_modules/moment/locale/kn.js | 126 +
node_modules/moment/locale/ko.js | 69 +
node_modules/moment/locale/ky.js | 88 +
node_modules/moment/locale/lb.js | 137 +
node_modules/moment/locale/lo.js | 70 +
node_modules/moment/locale/lt.js | 117 +
node_modules/moment/locale/lv.js | 97 +
node_modules/moment/locale/me.js | 111 +
node_modules/moment/locale/mi.js | 64 +
node_modules/moment/locale/mk.js | 90 +
node_modules/moment/locale/ml.js | 81 +
node_modules/moment/locale/mr.js | 159 +
node_modules/moment/locale/ms-my.js | 83 +
node_modules/moment/locale/ms.js | 82 +
node_modules/moment/locale/my.js | 96 +
node_modules/moment/locale/nb.js | 63 +
node_modules/moment/locale/ne.js | 123 +
node_modules/moment/locale/nl-be.js | 88 +
node_modules/moment/locale/nl.js | 88 +
node_modules/moment/locale/nn.js | 60 +
node_modules/moment/locale/pa-in.js | 124 +
node_modules/moment/locale/pl.js | 107 +
node_modules/moment/locale/pt-br.js | 61 +
node_modules/moment/locale/pt.js | 65 +
node_modules/moment/locale/ro.js | 75 +
node_modules/moment/locale/ru.js | 183 +
node_modules/moment/locale/sd.js | 98 +
node_modules/moment/locale/se.js | 61 +
node_modules/moment/locale/si.js | 71 +
node_modules/moment/locale/sk.js | 150 +
node_modules/moment/locale/sl.js | 162 +
node_modules/moment/locale/sq.js | 70 +
node_modules/moment/locale/sr-cyrl.js | 110 +
node_modules/moment/locale/sr.js | 110 +
node_modules/moment/locale/ss.js | 89 +
node_modules/moment/locale/sv.js | 69 +
node_modules/moment/locale/sw.js | 59 +
node_modules/moment/locale/ta.js | 130 +
node_modules/moment/locale/te.js | 89 +
node_modules/moment/locale/tet.js | 68 +
node_modules/moment/locale/th.js | 67 +
node_modules/moment/locale/tl-ph.js | 62 +
node_modules/moment/locale/tlh.js | 120 +
node_modules/moment/locale/tr.js | 90 +
node_modules/moment/locale/tzl.js | 91 +
node_modules/moment/locale/tzm-latn.js | 58 +
node_modules/moment/locale/tzm.js | 58 +
node_modules/moment/locale/uk.js | 151 +
node_modules/moment/locale/ur.js | 99 +
node_modules/moment/locale/uz-latn.js | 58 +
node_modules/moment/locale/uz.js | 58 +
node_modules/moment/locale/vi.js | 79 +
node_modules/moment/locale/x-pseudo.js | 68 +
node_modules/moment/locale/yo.js | 60 +
node_modules/moment/locale/zh-cn.js | 111 +
node_modules/moment/locale/zh-hk.js | 105 +
node_modules/moment/locale/zh-tw.js | 104 +
node_modules/moment/min/locales.js | 9252 ++
node_modules/moment/min/locales.min.js | 498 +
.../moment/min/moment-with-locales.js | 13700 ++
.../moment/min/moment-with-locales.min.js | 505 +
node_modules/moment/min/moment.min.js | 7 +
node_modules/moment/moment.d.ts | 712 +
node_modules/moment/moment.js | 4463 +
node_modules/moment/package.js | 11 +
node_modules/moment/package.json | 197 +
.../moment/src/lib/create/check-overflow.js | 34 +
.../moment/src/lib/create/date-from-array.js | 21 +
.../moment/src/lib/create/from-anything.js | 110 +
.../moment/src/lib/create/from-array.js | 140 +
.../moment/src/lib/create/from-object.js | 16 +
.../src/lib/create/from-string-and-array.js | 50 +
.../src/lib/create/from-string-and-format.js | 113 +
.../moment/src/lib/create/from-string.js | 202 +
node_modules/moment/src/lib/create/local.js | 5 +
.../moment/src/lib/create/parsing-flags.js | 26 +
node_modules/moment/src/lib/create/utc.js | 5 +
node_modules/moment/src/lib/create/valid.js | 49 +
node_modules/moment/src/lib/duration/abs.js | 18 +
.../moment/src/lib/duration/add-subtract.js | 21 +
node_modules/moment/src/lib/duration/as.js | 61 +
.../moment/src/lib/duration/bubble.js | 61 +
.../moment/src/lib/duration/constructor.js | 44 +
.../moment/src/lib/duration/create.js | 122 +
.../moment/src/lib/duration/duration.js | 16 +
node_modules/moment/src/lib/duration/get.js | 25 +
.../moment/src/lib/duration/humanize.js | 85 +
.../moment/src/lib/duration/iso-string.js | 56 +
.../moment/src/lib/duration/prototype.js | 50 +
node_modules/moment/src/lib/duration/valid.js | 35 +
node_modules/moment/src/lib/format/format.js | 92 +
.../moment/src/lib/locale/base-config.js | 44 +
.../moment/src/lib/locale/calendar.js | 15 +
.../moment/src/lib/locale/constructor.js | 5 +
node_modules/moment/src/lib/locale/en.js | 15 +
node_modules/moment/src/lib/locale/formats.js | 23 +
node_modules/moment/src/lib/locale/invalid.js | 5 +
node_modules/moment/src/lib/locale/lists.js | 93 +
node_modules/moment/src/lib/locale/locale.js | 39 +
node_modules/moment/src/lib/locale/locales.js | 186 +
node_modules/moment/src/lib/locale/ordinal.js | 7 +
.../moment/src/lib/locale/pre-post-format.js | 3 +
.../moment/src/lib/locale/prototype.js | 69 +
.../moment/src/lib/locale/relative.js | 30 +
node_modules/moment/src/lib/locale/set.js | 49 +
.../moment/src/lib/moment/add-subtract.js | 55 +
.../moment/src/lib/moment/calendar.js | 26 +
node_modules/moment/src/lib/moment/clone.js | 5 +
node_modules/moment/src/lib/moment/compare.js | 59 +
.../moment/src/lib/moment/constructor.js | 77 +
.../moment/src/lib/moment/creation-data.js | 9 +
node_modules/moment/src/lib/moment/diff.js | 62 +
node_modules/moment/src/lib/moment/format.js | 57 +
node_modules/moment/src/lib/moment/from.js | 17 +
node_modules/moment/src/lib/moment/get-set.js | 55 +
node_modules/moment/src/lib/moment/locale.js | 34 +
node_modules/moment/src/lib/moment/min-max.js | 63 +
node_modules/moment/src/lib/moment/moment.js | 28 +
node_modules/moment/src/lib/moment/now.js | 3 +
.../moment/src/lib/moment/prototype.js | 150 +
.../moment/src/lib/moment/start-end-of.js | 59 +
node_modules/moment/src/lib/moment/to-type.js | 34 +
node_modules/moment/src/lib/moment/to.js | 17 +
node_modules/moment/src/lib/moment/valid.js | 15 +
node_modules/moment/src/lib/parse/regex.js | 54 +
node_modules/moment/src/lib/parse/token.js | 33 +
node_modules/moment/src/lib/units/aliases.js | 30 +
.../moment/src/lib/units/constants.js | 9 +
.../moment/src/lib/units/day-of-month.js | 39 +
.../moment/src/lib/units/day-of-week.js | 364 +
.../moment/src/lib/units/day-of-year.js | 36 +
node_modules/moment/src/lib/units/hour.js | 144 +
.../moment/src/lib/units/millisecond.js | 69 +
node_modules/moment/src/lib/units/minute.js | 29 +
node_modules/moment/src/lib/units/month.js | 283 +
node_modules/moment/src/lib/units/offset.js | 235 +
.../moment/src/lib/units/priorities.js | 16 +
node_modules/moment/src/lib/units/quarter.js | 32 +
node_modules/moment/src/lib/units/second.js | 29 +
.../moment/src/lib/units/timestamp.js | 20 +
node_modules/moment/src/lib/units/timezone.js | 16 +
node_modules/moment/src/lib/units/units.js | 20 +
.../src/lib/units/week-calendar-utils.js | 65 +
.../moment/src/lib/units/week-year.js | 107 +
node_modules/moment/src/lib/units/week.js | 67 +
node_modules/moment/src/lib/units/year.js | 75 +
node_modules/moment/src/lib/utils/abs-ceil.js | 7 +
.../moment/src/lib/utils/abs-floor.js | 8 +
.../moment/src/lib/utils/abs-round.js | 7 +
.../moment/src/lib/utils/compare-arrays.js | 16 +
node_modules/moment/src/lib/utils/defaults.js | 10 +
.../moment/src/lib/utils/deprecate.js | 55 +
node_modules/moment/src/lib/utils/extend.js | 19 +
.../moment/src/lib/utils/has-own-prop.js | 3 +
node_modules/moment/src/lib/utils/hooks.js | 13 +
node_modules/moment/src/lib/utils/index-of.js | 18 +
node_modules/moment/src/lib/utils/is-array.js | 3 +
node_modules/moment/src/lib/utils/is-date.js | 3 +
.../moment/src/lib/utils/is-function.js | 3 +
.../moment/src/lib/utils/is-number.js | 3 +
.../moment/src/lib/utils/is-object-empty.js | 8 +
.../moment/src/lib/utils/is-object.js | 5 +
.../moment/src/lib/utils/is-undefined.js | 3 +
node_modules/moment/src/lib/utils/keys.js | 19 +
node_modules/moment/src/lib/utils/map.js | 7 +
node_modules/moment/src/lib/utils/some.js | 19 +
node_modules/moment/src/lib/utils/to-int.js | 12 +
.../moment/src/lib/utils/zero-fill.js | 7 +
node_modules/moment/src/locale/af.js | 63 +
node_modules/moment/src/locale/ar-dz.js | 50 +
node_modules/moment/src/locale/ar-kw.js | 49 +
node_modules/moment/src/locale/ar-ly.js | 112 +
node_modules/moment/src/locale/ar-ma.js | 51 +
node_modules/moment/src/locale/ar-sa.js | 95 +
node_modules/moment/src/locale/ar-tn.js | 50 +
node_modules/moment/src/locale/ar.js | 128 +
node_modules/moment/src/locale/az.js | 96 +
node_modules/moment/src/locale/be.js | 125 +
node_modules/moment/src/locale/bg.js | 81 +
node_modules/moment/src/locale/bn.js | 109 +
node_modules/moment/src/locale/bo.js | 110 +
node_modules/moment/src/locale/br.js | 99 +
node_modules/moment/src/locale/bs.js | 133 +
node_modules/moment/src/locale/ca.js | 79 +
node_modules/moment/src/locale/cs.js | 163 +
node_modules/moment/src/locale/cv.js | 53 +
node_modules/moment/src/locale/cy.js | 72 +
node_modules/moment/src/locale/da.js | 50 +
node_modules/moment/src/locale/de-at.js | 69 +
node_modules/moment/src/locale/de-ch.js | 68 +
node_modules/moment/src/locale/de.js | 68 +
node_modules/moment/src/locale/dv.js | 89 +
node_modules/moment/src/locale/el.js | 88 +
node_modules/moment/src/locale/en-au.js | 58 +
node_modules/moment/src/locale/en-ca.js | 53 +
node_modules/moment/src/locale/en-gb.js | 58 +
node_modules/moment/src/locale/en-ie.js | 58 +
node_modules/moment/src/locale/en-nz.js | 57 +
node_modules/moment/src/locale/eo.js | 64 +
node_modules/moment/src/locale/es-do.js | 73 +
node_modules/moment/src/locale/es.js | 74 +
node_modules/moment/src/locale/et.js | 71 +
node_modules/moment/src/locale/eu.js | 57 +
node_modules/moment/src/locale/fa.js | 97 +
node_modules/moment/src/locale/fi.js | 98 +
node_modules/moment/src/locale/fo.js | 51 +
node_modules/moment/src/locale/fr-ca.js | 65 +
node_modules/moment/src/locale/fr-ch.js | 69 +
node_modules/moment/src/locale/fr.js | 74 +
node_modules/moment/src/locale/fy.js | 66 +
node_modules/moment/src/locale/gd.js | 67 +
node_modules/moment/src/locale/gl.js | 68 +
node_modules/moment/src/locale/gom-latn.js | 112 +
node_modules/moment/src/locale/he.js | 90 +
node_modules/moment/src/locale/hi.js | 115 +
node_modules/moment/src/locale/hr.js | 135 +
node_modules/moment/src/locale/hu.js | 100 +
node_modules/moment/src/locale/hy-am.js | 86 +
node_modules/moment/src/locale/id.js | 74 +
node_modules/moment/src/locale/is.js | 118 +
node_modules/moment/src/locale/it.js | 61 +
node_modules/moment/src/locale/ja.js | 71 +
node_modules/moment/src/locale/jv.js | 73 +
node_modules/moment/src/locale/ka.js | 80 +
node_modules/moment/src/locale/kk.js | 77 +
node_modules/moment/src/locale/km.js | 49 +
node_modules/moment/src/locale/kn.js | 116 +
node_modules/moment/src/locale/ko.js | 60 +
node_modules/moment/src/locale/ky.js | 78 +
node_modules/moment/src/locale/lb.js | 128 +
node_modules/moment/src/locale/lo.js | 61 +
node_modules/moment/src/locale/lt.js | 108 +
node_modules/moment/src/locale/lv.js | 88 +
node_modules/moment/src/locale/me.js | 101 +
node_modules/moment/src/locale/mi.js | 54 +
node_modules/moment/src/locale/mk.js | 81 +
node_modules/moment/src/locale/ml.js | 72 +
node_modules/moment/src/locale/mr.js | 150 +
node_modules/moment/src/locale/ms-my.js | 74 +
node_modules/moment/src/locale/ms.js | 73 +
node_modules/moment/src/locale/my.js | 86 +
node_modules/moment/src/locale/nb.js | 54 +
node_modules/moment/src/locale/ne.js | 114 +
node_modules/moment/src/locale/nl-be.js | 79 +
node_modules/moment/src/locale/nl.js | 79 +
node_modules/moment/src/locale/nn.js | 51 +
node_modules/moment/src/locale/pa-in.js | 115 +
node_modules/moment/src/locale/pl.js | 97 +
node_modules/moment/src/locale/pt-br.js | 52 +
node_modules/moment/src/locale/pt.js | 56 +
node_modules/moment/src/locale/ro.js | 66 +
node_modules/moment/src/locale/ru.js | 173 +
node_modules/moment/src/locale/sd.js | 88 +
node_modules/moment/src/locale/se.js | 51 +
node_modules/moment/src/locale/si.js | 61 +
node_modules/moment/src/locale/sk.js | 141 +
node_modules/moment/src/locale/sl.js | 152 +
node_modules/moment/src/locale/sq.js | 61 +
node_modules/moment/src/locale/sr-cyrl.js | 100 +
node_modules/moment/src/locale/sr.js | 100 +
node_modules/moment/src/locale/ss.js | 80 +
node_modules/moment/src/locale/sv.js | 60 +
node_modules/moment/src/locale/sw.js | 50 +
node_modules/moment/src/locale/ta.js | 120 +
node_modules/moment/src/locale/te.js | 79 +
node_modules/moment/src/locale/tet.js | 58 +
node_modules/moment/src/locale/th.js | 57 +
node_modules/moment/src/locale/tl-ph.js | 53 +
node_modules/moment/src/locale/tlh.js | 110 +
node_modules/moment/src/locale/tr.js | 81 +
node_modules/moment/src/locale/tzl.js | 82 +
node_modules/moment/src/locale/tzm-latn.js | 49 +
node_modules/moment/src/locale/tzm.js | 49 +
node_modules/moment/src/locale/uk.js | 142 +
node_modules/moment/src/locale/ur.js | 89 +
node_modules/moment/src/locale/uz-latn.js | 49 +
node_modules/moment/src/locale/uz.js | 49 +
node_modules/moment/src/locale/vi.js | 70 +
node_modules/moment/src/locale/x-pseudo.js | 58 +
node_modules/moment/src/locale/yo.js | 50 +
node_modules/moment/src/locale/zh-cn.js | 102 +
node_modules/moment/src/locale/zh-hk.js | 95 +
node_modules/moment/src/locale/zh-tw.js | 94 +
node_modules/moment/src/moment.js | 82 +
node_modules/morgan/HISTORY.md | 158 +
node_modules/morgan/LICENSE | 23 +
node_modules/morgan/README.md | 324 +
node_modules/morgan/index.js | 501 +
.../morgan/node_modules/debug/.jshintrc | 3 +
.../morgan/node_modules/debug/.npmignore | 6 +
.../morgan/node_modules/debug/History.md | 195 +
.../morgan/node_modules/debug/Makefile | 36 +
.../morgan/node_modules/debug/Readme.md | 188 +
.../morgan/node_modules/debug/bower.json | 28 +
.../morgan/node_modules/debug/browser.js | 168 +
.../morgan/node_modules/debug/component.json | 19 +
.../morgan/node_modules/debug/debug.js | 197 +
.../morgan/node_modules/debug/node.js | 209 +
.../morgan/node_modules/debug/package.json | 106 +
.../morgan/node_modules/ms/.npmignore | 5 +
.../morgan/node_modules/ms/History.md | 66 +
node_modules/morgan/node_modules/ms/LICENSE | 20 +
node_modules/morgan/node_modules/ms/README.md | 35 +
node_modules/morgan/node_modules/ms/index.js | 125 +
.../morgan/node_modules/ms/package.json | 82 +
node_modules/morgan/package.json | 131 +
node_modules/ms/LICENSE.md | 21 +
node_modules/ms/README.md | 52 +
node_modules/ms/index.js | 149 +
node_modules/ms/package.json | 110 +
node_modules/multipipe/.npmignore | 1 +
node_modules/multipipe/.travis.yml | 3 +
node_modules/multipipe/History.md | 25 +
node_modules/multipipe/Makefile | 10 +
node_modules/multipipe/Readme.md | 102 +
node_modules/multipipe/index.js | 72 +
node_modules/multipipe/package.json | 79 +
node_modules/multipipe/test/multipipe.js | 141 +
node_modules/natives/README.md | 64 +
node_modules/natives/index.js | 115 +
node_modules/natives/package.json | 90 +
node_modules/negotiator/HISTORY.md | 98 +
node_modules/negotiator/LICENSE | 24 +
node_modules/negotiator/README.md | 203 +
node_modules/negotiator/index.js | 124 +
node_modules/negotiator/lib/charset.js | 169 +
node_modules/negotiator/lib/encoding.js | 184 +
node_modules/negotiator/lib/language.js | 179 +
node_modules/negotiator/lib/mediaType.js | 294 +
node_modules/negotiator/package.json | 125 +
node_modules/next-tick/.lint | 14 +
node_modules/next-tick/.npmignore | 4 +
node_modules/next-tick/.travis.yml | 16 +
node_modules/next-tick/CHANGES | 24 +
node_modules/next-tick/LICENSE | 21 +
node_modules/next-tick/README.md | 24 +
node_modules/next-tick/index.js | 71 +
node_modules/next-tick/package.json | 97 +
node_modules/next-tick/test/index.js | 22 +
node_modules/nopt/.npmignore | 1 +
node_modules/nopt/.travis.yml | 9 +
node_modules/nopt/LICENSE | 15 +
node_modules/nopt/README.md | 211 +
node_modules/nopt/bin/nopt.js | 54 +
node_modules/nopt/examples/my-program.js | 30 +
node_modules/nopt/lib/nopt.js | 415 +
node_modules/nopt/package.json | 96 +
node_modules/nopt/test/basic.js | 273 +
node_modules/normalize-package-data/AUTHORS | 4 +
node_modules/normalize-package-data/LICENSE | 30 +
node_modules/normalize-package-data/README.md | 106 +
.../lib/extract_description.js | 14 +
.../normalize-package-data/lib/fixer.js | 418 +
.../lib/make_warning.js | 23 +
.../normalize-package-data/lib/normalize.js | 39 +
.../normalize-package-data/lib/safe_format.js | 9 +
.../normalize-package-data/lib/typos.json | 25 +
.../lib/warning_messages.json | 31 +
.../normalize-package-data/package.json | 128 +
node_modules/normalize-path/LICENSE | 21 +
node_modules/normalize-path/README.md | 92 +
node_modules/normalize-path/index.js | 19 +
node_modules/normalize-path/package.json | 156 +
node_modules/number-is-nan/index.js | 4 +
node_modules/number-is-nan/license | 21 +
node_modules/number-is-nan/package.json | 103 +
node_modules/number-is-nan/readme.md | 28 +
node_modules/object-assign/index.js | 83 +
node_modules/object-assign/license | 21 +
node_modules/object-assign/package.json | 114 +
node_modules/object-assign/readme.md | 56 +
node_modules/object.omit/LICENSE | 21 +
node_modules/object.omit/README.md | 118 +
node_modules/object.omit/index.js | 40 +
node_modules/object.omit/package.json | 137 +
node_modules/on-finished/HISTORY.md | 88 +
node_modules/on-finished/LICENSE | 23 +
node_modules/on-finished/README.md | 154 +
node_modules/on-finished/index.js | 196 +
node_modules/on-finished/package.json | 108 +
node_modules/on-headers/HISTORY.md | 16 +
node_modules/on-headers/LICENSE | 22 +
node_modules/on-headers/README.md | 76 +
node_modules/on-headers/index.js | 93 +
node_modules/on-headers/package.json | 103 +
node_modules/once/LICENSE | 15 +
node_modules/once/README.md | 51 +
node_modules/once/once.js | 21 +
node_modules/once/package.json | 98 +
node_modules/optimist/.travis.yml | 4 +
node_modules/optimist/LICENSE | 21 +
node_modules/optimist/example/bool.js | 10 +
.../optimist/example/boolean_double.js | 7 +
.../optimist/example/boolean_single.js | 7 +
node_modules/optimist/example/default_hash.js | 8 +
.../optimist/example/default_singles.js | 7 +
node_modules/optimist/example/divide.js | 8 +
node_modules/optimist/example/line_count.js | 20 +
.../optimist/example/line_count_options.js | 29 +
.../optimist/example/line_count_wrap.js | 29 +
node_modules/optimist/example/nonopt.js | 4 +
node_modules/optimist/example/reflect.js | 2 +
node_modules/optimist/example/short.js | 3 +
node_modules/optimist/example/string.js | 11 +
.../optimist/example/usage-options.js | 19 +
node_modules/optimist/example/xup.js | 10 +
node_modules/optimist/index.js | 478 +
node_modules/optimist/package.json | 96 +
node_modules/optimist/readme.markdown | 487 +
node_modules/optimist/test/_.js | 71 +
node_modules/optimist/test/_/argv.js | 2 +
node_modules/optimist/test/_/bin.js | 3 +
node_modules/optimist/test/parse.js | 446 +
node_modules/optimist/test/usage.js | 292 +
node_modules/orchestrator/.npmignore | 10 +
node_modules/orchestrator/LICENSE | 20 +
node_modules/orchestrator/README.md | 286 +
node_modules/orchestrator/index.js | 304 +
node_modules/orchestrator/lib/runTask.js | 66 +
node_modules/orchestrator/package.json | 104 +
node_modules/ordered-read-streams/.npmignore | 16 +
node_modules/ordered-read-streams/.travis.yml | 4 +
node_modules/ordered-read-streams/LICENSE | 20 +
node_modules/ordered-read-streams/README.md | 65 +
node_modules/ordered-read-streams/index.js | 87 +
.../ordered-read-streams/package.json | 85 +
.../ordered-read-streams/test/main.js | 160 +
node_modules/os-homedir/index.js | 24 +
node_modules/os-homedir/license | 21 +
node_modules/os-homedir/package.json | 110 +
node_modules/os-homedir/readme.md | 31 +
node_modules/os-locale/index.js | 127 +
node_modules/os-locale/license | 21 +
node_modules/os-locale/package.json | 114 +
node_modules/os-locale/readme.md | 47 +
node_modules/packet-reader/.npmignore | 1 +
node_modules/packet-reader/index.js | 57 +
node_modules/packet-reader/package.json | 81 +
node_modules/packet-reader/test/index.js | 135 +
node_modules/parse-filepath/LICENSE | 21 +
node_modules/parse-filepath/README.md | 111 +
node_modules/parse-filepath/index.js | 90 +
node_modules/parse-filepath/package.json | 149 +
node_modules/parse-glob/LICENSE | 21 +
node_modules/parse-glob/README.md | 115 +
node_modules/parse-glob/index.js | 156 +
node_modules/parse-glob/package.json | 124 +
node_modules/parse-json/index.js | 35 +
node_modules/parse-json/license | 21 +
node_modules/parse-json/package.json | 109 +
node_modules/parse-json/readme.md | 83 +
node_modules/parse-json/vendor/parse.js | 752 +
node_modules/parse-json/vendor/unicode.js | 71 +
node_modules/parse-passwd/LICENSE | 21 +
node_modules/parse-passwd/README.md | 86 +
node_modules/parse-passwd/index.js | 56 +
node_modules/parse-passwd/package.json | 122 +
node_modules/parseurl/HISTORY.md | 47 +
node_modules/parseurl/LICENSE | 24 +
node_modules/parseurl/README.md | 120 +
node_modules/parseurl/index.js | 138 +
node_modules/parseurl/package.json | 125 +
node_modules/path-exists/index.js | 24 +
node_modules/path-exists/license | 21 +
node_modules/path-exists/package.json | 103 +
node_modules/path-exists/readme.md | 45 +
node_modules/path-parse/.travis.yml | 9 +
node_modules/path-parse/README.md | 44 +
node_modules/path-parse/index.js | 93 +
node_modules/path-parse/index.min.js | 1 +
node_modules/path-parse/package.json | 92 +
node_modules/path-parse/test.js | 77 +
node_modules/path-parse/test.min.js | 1 +
node_modules/path-root-regex/LICENSE | 21 +
node_modules/path-root-regex/README.md | 53 +
node_modules/path-root-regex/index.js | 13 +
node_modules/path-root-regex/package.json | 132 +
node_modules/path-root/LICENSE | 21 +
node_modules/path-root/README.md | 94 +
node_modules/path-root/index.js | 21 +
node_modules/path-root/package.json | 124 +
node_modules/path-to-regexp/History.md | 36 +
node_modules/path-to-regexp/LICENSE | 21 +
node_modules/path-to-regexp/Readme.md | 35 +
node_modules/path-to-regexp/index.js | 129 +
node_modules/path-to-regexp/package.json | 219 +
node_modules/path-type/index.js | 29 +
node_modules/path-type/license | 21 +
node_modules/path-type/package.json | 115 +
node_modules/path-type/readme.md | 42 +
node_modules/pg-connection-string/.npmignore | 25 +
node_modules/pg-connection-string/.travis.yml | 3 +
node_modules/pg-connection-string/LICENSE | 21 +
node_modules/pg-connection-string/README.md | 18 +
node_modules/pg-connection-string/index.js | 62 +
.../pg-connection-string/package.json | 88 +
.../pg-connection-string/test/parse.js | 126 +
node_modules/pg-pool/.npmignore | 2 +
node_modules/pg-pool/.travis.yml | 19 +
node_modules/pg-pool/Makefile | 14 +
node_modules/pg-pool/README.md | 350 +
node_modules/pg-pool/index.js | 174 +
node_modules/pg-pool/package.json | 102 +
node_modules/pg-pool/test/events.js | 71 +
node_modules/pg-pool/test/index.js | 232 +
node_modules/pg-pool/test/logging.js | 20 +
node_modules/pg-pool/test/mocha.opts | 2 +
node_modules/pg-types/.npmignore | 1 +
node_modules/pg-types/.travis.yml | 6 +
node_modules/pg-types/Makefile | 14 +
node_modules/pg-types/README.md | 77 +
node_modules/pg-types/index.js | 45 +
node_modules/pg-types/lib/arrayParser.js | 11 +
node_modules/pg-types/lib/binaryParsers.js | 254 +
node_modules/pg-types/lib/textParsers.js | 181 +
node_modules/pg-types/package.json | 98 +
node_modules/pg-types/test/index.js | 24 +
node_modules/pg-types/test/types.js | 415 +
node_modules/pg/.jshintrc | 5 +
node_modules/pg/.npmignore | 8 +
node_modules/pg/.travis.yml | 44 +
node_modules/pg/CHANGELOG.md | 232 +
node_modules/pg/Makefile | 63 +
node_modules/pg/README.md | 223 +
node_modules/pg/lib/client.js | 354 +
node_modules/pg/lib/connection-parameters.js | 101 +
node_modules/pg/lib/connection.js | 670 +
node_modules/pg/lib/defaults.js | 74 +
node_modules/pg/lib/index.js | 114 +
node_modules/pg/lib/native/index.js | 201 +
node_modules/pg/lib/native/query.js | 138 +
node_modules/pg/lib/native/result.js | 36 +
node_modules/pg/lib/pool-factory.js | 18 +
node_modules/pg/lib/query.js | 218 +
node_modules/pg/lib/result.js | 115 +
node_modules/pg/lib/type-overrides.js | 38 +
node_modules/pg/lib/utils.js | 147 +
node_modules/pg/package.json | 112 +
node_modules/pgpass/.jshintrc | 7 +
node_modules/pgpass/.npmignore | 6 +
node_modules/pgpass/.travis.yml | 19 +
node_modules/pgpass/README.md | 74 +
node_modules/pgpass/coverage.json | 333 +
node_modules/pgpass/lib/helper.js | 233 +
node_modules/pgpass/lib/index.js | 23 +
node_modules/pgpass/package.json | 105 +
node_modules/pgpass/test/#1 de-escaping.js | 42 +
node_modules/pgpass/test/#1 escaping.js | 31 +
.../pgpass/test/#6 too many open files.js | 68 +
node_modules/pgpass/test/_pgpass | 10 +
node_modules/pgpass/test/helper.js | 285 +
node_modules/pgpass/test/index.js | 52 +
.../pgpass/test/integration/#1 escaping.js | 178 +
node_modules/pify/index.js | 68 +
node_modules/pify/license | 21 +
node_modules/pify/package.json | 113 +
node_modules/pify/readme.md | 119 +
node_modules/pinkie-promise/index.js | 3 +
node_modules/pinkie-promise/license | 21 +
node_modules/pinkie-promise/package.json | 105 +
node_modules/pinkie-promise/readme.md | 28 +
node_modules/pinkie/index.js | 292 +
node_modules/pinkie/license | 21 +
node_modules/pinkie/package.json | 100 +
node_modules/pinkie/readme.md | 83 +
node_modules/postgres-array/index.js | 85 +
node_modules/postgres-array/license | 21 +
node_modules/postgres-array/package.json | 101 +
node_modules/postgres-array/readme.md | 43 +
node_modules/postgres-bytea/index.js | 31 +
node_modules/postgres-bytea/license | 21 +
node_modules/postgres-bytea/package.json | 97 +
node_modules/postgres-bytea/readme.md | 34 +
node_modules/postgres-date/index.js | 82 +
node_modules/postgres-date/license | 21 +
node_modules/postgres-date/package.json | 100 +
node_modules/postgres-date/readme.md | 34 +
node_modules/postgres-interval/index.js | 66 +
node_modules/postgres-interval/license | 21 +
node_modules/postgres-interval/package.json | 102 +
node_modules/postgres-interval/readme.md | 40 +
node_modules/preserve/.gitattributes | 14 +
node_modules/preserve/.jshintrc | 24 +
node_modules/preserve/.npmignore | 53 +
node_modules/preserve/.travis.yml | 3 +
node_modules/preserve/.verb.md | 59 +
node_modules/preserve/LICENSE | 24 +
node_modules/preserve/README.md | 90 +
node_modules/preserve/index.js | 54 +
node_modules/preserve/package.json | 104 +
node_modules/preserve/test.js | 48 +
node_modules/pretty-hrtime/.jshintignore | 1 +
node_modules/pretty-hrtime/.npmignore | 10 +
node_modules/pretty-hrtime/LICENSE | 20 +
node_modules/pretty-hrtime/README.md | 57 +
node_modules/pretty-hrtime/index.js | 80 +
node_modules/pretty-hrtime/package.json | 95 +
node_modules/process-nextick-args/.travis.yml | 12 +
node_modules/process-nextick-args/index.js | 43 +
node_modules/process-nextick-args/license.md | 19 +
.../process-nextick-args/package.json | 83 +
node_modules/process-nextick-args/readme.md | 18 +
node_modules/process-nextick-args/test.js | 24 +
node_modules/promise/.jshintrc | 5 +
node_modules/promise/.npmignore | 6 +
node_modules/promise/LICENSE | 19 +
node_modules/promise/Readme.md | 221 +
node_modules/promise/core.js | 5 +
node_modules/promise/index.js | 6 +
node_modules/promise/lib/core.js | 105 +
node_modules/promise/lib/done.js | 14 +
node_modules/promise/lib/es6-extensions.js | 108 +
node_modules/promise/lib/node-extensions.js | 63 +
node_modules/promise/package.json | 90 +
node_modules/promise/polyfill-done.js | 12 +
node_modules/promise/polyfill.js | 10 +
node_modules/proto-list/LICENSE | 15 +
node_modules/proto-list/README.md | 3 +
node_modules/proto-list/package.json | 83 +
node_modules/proto-list/proto-list.js | 88 +
node_modules/proto-list/test/basic.js | 61 +
node_modules/proxy-addr/HISTORY.md | 109 +
node_modules/proxy-addr/LICENSE | 22 +
node_modules/proxy-addr/README.md | 140 +
node_modules/proxy-addr/index.js | 325 +
node_modules/proxy-addr/package.json | 108 +
node_modules/pseudomap/LICENSE | 15 +
node_modules/pseudomap/README.md | 60 +
node_modules/pseudomap/map.js | 9 +
node_modules/pseudomap/package.json | 86 +
node_modules/pseudomap/pseudomap.js | 113 +
node_modules/pseudomap/test/basic.js | 86 +
node_modules/qs/.eslintignore | 1 +
node_modules/qs/.eslintrc | 19 +
node_modules/qs/CHANGELOG.md | 130 +
node_modules/qs/CONTRIBUTING.md | 1 +
node_modules/qs/LICENSE | 28 +
node_modules/qs/README.md | 376 +
node_modules/qs/dist/qs.js | 486 +
node_modules/qs/lib/index.js | 9 +
node_modules/qs/lib/parse.js | 166 +
node_modules/qs/lib/stringify.js | 137 +
node_modules/qs/lib/utils.js | 164 +
node_modules/qs/package.json | 120 +
node_modules/qs/test/index.js | 5 +
node_modules/qs/test/parse.js | 451 +
node_modules/qs/test/stringify.js | 305 +
node_modules/qs/test/utils.js | 9 +
node_modules/randomatic/LICENSE | 21 +
node_modules/randomatic/README.md | 152 +
node_modules/randomatic/index.js | 83 +
node_modules/randomatic/package.json | 141 +
node_modules/range-parser/HISTORY.md | 51 +
node_modules/range-parser/LICENSE | 23 +
node_modules/range-parser/README.md | 75 +
node_modules/range-parser/index.js | 158 +
node_modules/range-parser/package.json | 134 +
node_modules/raw-body/HISTORY.md | 220 +
node_modules/raw-body/LICENSE | 22 +
node_modules/raw-body/README.md | 145 +
node_modules/raw-body/index.js | 320 +
node_modules/raw-body/package.json | 125 +
node_modules/read-pkg-up/index.js | 31 +
node_modules/read-pkg-up/license | 21 +
node_modules/read-pkg-up/package.json | 122 +
node_modules/read-pkg-up/readme.md | 79 +
node_modules/read-pkg/index.js | 48 +
node_modules/read-pkg/license | 21 +
node_modules/read-pkg/package.json | 105 +
node_modules/read-pkg/readme.md | 79 +
node_modules/readable-stream/.npmignore | 5 +
node_modules/readable-stream/LICENSE | 18 +
node_modules/readable-stream/README.md | 15 +
node_modules/readable-stream/duplex.js | 1 +
node_modules/readable-stream/float.patch | 923 +
.../readable-stream/lib/_stream_duplex.js | 89 +
.../lib/_stream_passthrough.js | 46 +
.../readable-stream/lib/_stream_readable.js | 951 +
.../readable-stream/lib/_stream_transform.js | 209 +
.../readable-stream/lib/_stream_writable.js | 477 +
.../node_modules/isarray/README.md | 54 +
.../node_modules/isarray/build/build.js | 209 +
.../node_modules/isarray/component.json | 19 +
.../node_modules/isarray/index.js | 3 +
.../node_modules/isarray/package.json | 86 +
node_modules/readable-stream/package.json | 112 +
node_modules/readable-stream/passthrough.js | 1 +
node_modules/readable-stream/readable.js | 10 +
node_modules/readable-stream/transform.js | 1 +
node_modules/readable-stream/writable.js | 1 +
node_modules/rechoir/.npmignore | 1 +
node_modules/rechoir/.travis.yml | 24 +
node_modules/rechoir/CHANGELOG | 38 +
node_modules/rechoir/LICENSE | 22 +
node_modules/rechoir/README.md | 42 +
node_modules/rechoir/index.js | 59 +
node_modules/rechoir/lib/extension.js | 11 +
node_modules/rechoir/lib/normalize.js | 15 +
node_modules/rechoir/lib/register.js | 15 +
node_modules/rechoir/package.json | 148 +
node_modules/redefine/.gitattributes | 1 +
node_modules/redefine/.npmignore | 6 +
node_modules/redefine/.travis.yml | 9 +
node_modules/redefine/HOWTO.md | 307 +
node_modules/redefine/LICENSE.txt | 19 +
node_modules/redefine/README.md | 491 +
node_modules/redefine/build/redefine.js | 2 +
node_modules/redefine/build/redefine.max.js | 505 +
node_modules/redefine/package.json | 111 +
node_modules/redefine/template/license.after | 2 +
node_modules/redefine/template/license.before | 1 +
node_modules/regex-cache/LICENSE | 21 +
node_modules/regex-cache/README.md | 160 +
node_modules/regex-cache/index.js | 69 +
node_modules/regex-cache/package.json | 131 +
.../remove-trailing-separator/history.md | 9 +
.../remove-trailing-separator/index.js | 13 +
.../remove-trailing-separator/license | 3 +
.../remove-trailing-separator/package.json | 100 +
.../remove-trailing-separator/readme.md | 51 +
node_modules/repeat-element/LICENSE | 21 +
node_modules/repeat-element/README.md | 71 +
node_modules/repeat-element/index.js | 18 +
node_modules/repeat-element/package.json | 102 +
node_modules/repeat-string/LICENSE | 21 +
node_modules/repeat-string/README.md | 136 +
node_modules/repeat-string/index.js | 70 +
node_modules/repeat-string/package.json | 168 +
node_modules/replace-ext/.npmignore | 6 +
node_modules/replace-ext/.travis.yml | 8 +
node_modules/replace-ext/LICENSE | 20 +
node_modules/replace-ext/README.md | 44 +
node_modules/replace-ext/index.js | 9 +
node_modules/replace-ext/package.json | 97 +
node_modules/replace-ext/test/main.js | 51 +
node_modules/require-directory/.jshintrc | 67 +
node_modules/require-directory/.npmignore | 1 +
node_modules/require-directory/.travis.yml | 3 +
node_modules/require-directory/LICENSE | 22 +
.../require-directory/README.markdown | 184 +
node_modules/require-directory/index.js | 86 +
node_modules/require-directory/package.json | 101 +
node_modules/require-main-filename/.npmignore | 3 +
.../require-main-filename/.travis.yml | 8 +
.../require-main-filename/LICENSE.txt | 14 +
node_modules/require-main-filename/README.md | 26 +
node_modules/require-main-filename/index.js | 18 +
.../require-main-filename/package.json | 94 +
node_modules/require-main-filename/test.js | 36 +
node_modules/resolve-dir/LICENSE | 21 +
node_modules/resolve-dir/README.md | 88 +
node_modules/resolve-dir/index.js | 22 +
node_modules/resolve-dir/package.json | 140 +
node_modules/resolve/.eslintignore | 1 +
node_modules/resolve/.eslintrc | 27 +
node_modules/resolve/.npmignore | 1 +
node_modules/resolve/.travis.yml | 176 +
node_modules/resolve/LICENSE | 18 +
node_modules/resolve/appveyor.yml | 44 +
node_modules/resolve/example/async.js | 5 +
node_modules/resolve/example/sync.js | 3 +
node_modules/resolve/index.js | 8 +
node_modules/resolve/lib/async.js | 203 +
node_modules/resolve/lib/caller.js | 8 +
node_modules/resolve/lib/core.js | 22 +
node_modules/resolve/lib/core.json | 47 +
.../resolve/lib/node-modules-paths.js | 35 +
node_modules/resolve/lib/sync.js | 89 +
node_modules/resolve/package.json | 111 +
node_modules/resolve/readme.markdown | 148 +
node_modules/resolve/test/core.js | 29 +
node_modules/resolve/test/dotdot.js | 29 +
node_modules/resolve/test/dotdot/abc/index.js | 2 +
node_modules/resolve/test/dotdot/index.js | 1 +
node_modules/resolve/test/faulty_basedir.js | 13 +
node_modules/resolve/test/filter.js | 19 +
node_modules/resolve/test/filter_sync.js | 16 +
node_modules/resolve/test/mock.js | 143 +
node_modules/resolve/test/mock_sync.js | 67 +
node_modules/resolve/test/module_dir.js | 56 +
.../test/module_dir/xmodules/aaa/index.js | 1 +
.../test/module_dir/ymodules/aaa/index.js | 1 +
.../test/module_dir/zmodules/bbb/main.js | 1 +
.../test/module_dir/zmodules/bbb/package.json | 3 +
.../resolve/test/node-modules-paths.js | 93 +
node_modules/resolve/test/node_path.js | 49 +
.../resolve/test/node_path/x/aaa/index.js | 1 +
.../resolve/test/node_path/x/ccc/index.js | 1 +
.../resolve/test/node_path/y/bbb/index.js | 1 +
.../resolve/test/node_path/y/ccc/index.js | 1 +
node_modules/resolve/test/nonstring.js | 9 +
node_modules/resolve/test/pathfilter.js | 42 +
.../resolve/test/pathfilter/deep_ref/main.js | 0
node_modules/resolve/test/precedence.js | 23 +
node_modules/resolve/test/precedence/aaa.js | 1 +
.../resolve/test/precedence/aaa/index.js | 1 +
.../resolve/test/precedence/aaa/main.js | 1 +
node_modules/resolve/test/precedence/bbb.js | 1 +
.../resolve/test/precedence/bbb/main.js | 1 +
node_modules/resolve/test/resolver.js | 327 +
.../resolve/test/resolver/baz/doom.js | 0
.../resolve/test/resolver/baz/package.json | 3 +
.../resolve/test/resolver/baz/quux.js | 1 +
node_modules/resolve/test/resolver/cup.coffee | 1 +
node_modules/resolve/test/resolver/foo.js | 1 +
.../test/resolver/incorrect_main/index.js | 2 +
.../test/resolver/incorrect_main/package.json | 3 +
node_modules/resolve/test/resolver/mug.coffee | 0
node_modules/resolve/test/resolver/mug.js | 0
.../test/resolver/other_path/lib/other-lib.js | 0
.../resolve/test/resolver/other_path/root.js | 0
.../resolve/test/resolver/quux/foo/index.js | 1 +
.../resolve/test/resolver/same_names/foo.js | 1 +
.../test/resolver/same_names/foo/index.js | 1 +
.../test/resolver/without_basedir/main.js | 5 +
node_modules/resolve/test/resolver_sync.js | 253 +
node_modules/resolve/test/subdirs.js | 13 +
node_modules/retry-as-promised/.npmignore | 27 +
node_modules/retry-as-promised/LICENSE | 23 +
node_modules/retry-as-promised/README.md | 33 +
node_modules/retry-as-promised/index.js | 88 +
node_modules/retry-as-promised/package.json | 102 +
.../retry-as-promised/test/bluebird.test.js | 186 +
node_modules/right-align/LICENSE | 21 +
node_modules/right-align/README.md | 77 +
node_modules/right-align/index.js | 16 +
node_modules/right-align/package.json | 101 +
node_modules/semver/.npmignore | 1 +
node_modules/semver/LICENSE | 27 +
node_modules/semver/Makefile | 24 +
node_modules/semver/README.md | 303 +
node_modules/semver/bin/semver | 133 +
node_modules/semver/foot.js.txt | 6 +
node_modules/semver/head.js.txt | 2 +
node_modules/semver/package.json | 91 +
node_modules/semver/semver.browser.js | 1187 +
node_modules/semver/semver.browser.js.gz | Bin 0 -> 7938 bytes
node_modules/semver/semver.js | 1191 +
node_modules/semver/semver.min.js | 1 +
node_modules/semver/semver.min.js.gz | Bin 0 -> 3756 bytes
node_modules/semver/test/amd.js | 15 +
node_modules/semver/test/big-numbers.js | 24 +
node_modules/semver/test/clean.js | 29 +
node_modules/semver/test/gtr.js | 173 +
node_modules/semver/test/index.js | 684 +
node_modules/semver/test/ltr.js | 181 +
node_modules/semver/test/major-minor-patch.js | 72 +
node_modules/semver/test/no-module.js | 19 +
node_modules/send/HISTORY.md | 356 +
node_modules/send/LICENSE | 23 +
node_modules/send/README.md | 251 +
node_modules/send/index.js | 948 +
.../send/node_modules/debug/.jshintrc | 3 +
.../send/node_modules/debug/.npmignore | 6 +
.../send/node_modules/debug/History.md | 195 +
node_modules/send/node_modules/debug/Makefile | 36 +
.../send/node_modules/debug/Readme.md | 188 +
.../send/node_modules/debug/bower.json | 28 +
.../send/node_modules/debug/browser.js | 168 +
.../send/node_modules/debug/component.json | 19 +
node_modules/send/node_modules/debug/debug.js | 197 +
node_modules/send/node_modules/debug/node.js | 209 +
.../debug/node_modules/ms/.npmignore | 5 +
.../debug/node_modules/ms/History.md | 66 +
.../debug/node_modules/ms/LICENSE | 20 +
.../debug/node_modules/ms/README.md | 35 +
.../debug/node_modules/ms/index.js | 125 +
.../debug/node_modules/ms/package.json | 82 +
.../send/node_modules/debug/package.json | 106 +
node_modules/send/package.json | 130 +
node_modules/sequelize-cli/.editorconfig | 21 +
node_modules/sequelize-cli/.jscsrc | 57 +
node_modules/sequelize-cli/.jshintrc | 19 +
node_modules/sequelize-cli/.mention-bot | 4 +
node_modules/sequelize-cli/.npmignore | 30 +
node_modules/sequelize-cli/.travis.yml | 27 +
node_modules/sequelize-cli/CHANGELOG.md | 280 +
node_modules/sequelize-cli/LICENSE | 21 +
node_modules/sequelize-cli/README.md | 309 +
node_modules/sequelize-cli/bin/get-env-matrix | 51 +
node_modules/sequelize-cli/bin/sequelize | 101 +
node_modules/sequelize-cli/gulpfile.js | 53 +
.../lib/assets/migrations/create-table.js | 35 +
.../lib/assets/migrations/skeleton.js | 23 +
.../sequelize-cli/lib/assets/models/index.js | 36 +
.../sequelize-cli/lib/assets/models/model.js | 19 +
.../lib/assets/seeders/skeleton.js | 26 +
node_modules/sequelize-cli/lib/gulpfile.js | 26 +
.../sequelize-cli/lib/helpers/asset-helper.js | 28 +
.../lib/helpers/config-helper.js | 215 +
.../lib/helpers/generic-helper.js | 58 +
.../sequelize-cli/lib/helpers/gulp-helper.js | 129 +
.../sequelize-cli/lib/helpers/index.js | 15 +
.../sequelize-cli/lib/helpers/init-helper.js | 83 +
.../sequelize-cli/lib/helpers/log-helper.js | 44 +
.../lib/helpers/migration-helper.js | 31 +
.../sequelize-cli/lib/helpers/model-helper.js | 51 +
.../sequelize-cli/lib/helpers/path-helper.js | 88 +
.../lib/helpers/template-helper.js | 36 +
.../sequelize-cli/lib/helpers/umzug-helper.js | 52 +
.../lib/helpers/version-helper.js | 58 +
.../sequelize-cli/lib/helpers/view-helper.js | 46 +
node_modules/sequelize-cli/lib/tasks/db.js | 521 +
node_modules/sequelize-cli/lib/tasks/init.js | 107 +
.../sequelize-cli/lib/tasks/migration.js | 48 +
node_modules/sequelize-cli/lib/tasks/model.js | 136 +
node_modules/sequelize-cli/lib/tasks/seed.js | 47 +
.../sequelize-cli/lib/tasks/version.js | 15 +
.../node_modules/camelcase/index.js | 56 +
.../node_modules/camelcase/license | 21 +
.../node_modules/camelcase/package.json | 107 +
.../node_modules/camelcase/readme.md | 57 +
.../node_modules/cliui/CHANGELOG.md | 15 +
.../node_modules/cliui/LICENSE.txt | 14 +
.../node_modules/cliui/README.md | 110 +
.../sequelize-cli/node_modules/cliui/index.js | 316 +
.../node_modules/cliui/package.json | 131 +
.../sequelize-cli/node_modules/lodash/LICENSE | 47 +
.../node_modules/lodash/README.md | 39 +
.../node_modules/lodash/_DataView.js | 7 +
.../node_modules/lodash/_Hash.js | 32 +
.../node_modules/lodash/_LazyWrapper.js | 28 +
.../node_modules/lodash/_ListCache.js | 32 +
.../node_modules/lodash/_LodashWrapper.js | 22 +
.../sequelize-cli/node_modules/lodash/_Map.js | 7 +
.../node_modules/lodash/_MapCache.js | 32 +
.../node_modules/lodash/_Promise.js | 7 +
.../sequelize-cli/node_modules/lodash/_Set.js | 7 +
.../node_modules/lodash/_SetCache.js | 27 +
.../node_modules/lodash/_Stack.js | 27 +
.../node_modules/lodash/_Symbol.js | 6 +
.../node_modules/lodash/_Uint8Array.js | 6 +
.../node_modules/lodash/_WeakMap.js | 7 +
.../node_modules/lodash/_addMapEntry.js | 15 +
.../node_modules/lodash/_addSetEntry.js | 15 +
.../node_modules/lodash/_apply.js | 21 +
.../node_modules/lodash/_arrayAggregator.js | 22 +
.../node_modules/lodash/_arrayEach.js | 22 +
.../node_modules/lodash/_arrayEachRight.js | 21 +
.../node_modules/lodash/_arrayEvery.js | 23 +
.../node_modules/lodash/_arrayFilter.js | 25 +
.../node_modules/lodash/_arrayIncludes.js | 17 +
.../node_modules/lodash/_arrayIncludesWith.js | 22 +
.../node_modules/lodash/_arrayLikeKeys.js | 49 +
.../node_modules/lodash/_arrayMap.js | 21 +
.../node_modules/lodash/_arrayPush.js | 20 +
.../node_modules/lodash/_arrayReduce.js | 26 +
.../node_modules/lodash/_arrayReduceRight.js | 24 +
.../node_modules/lodash/_arraySample.js | 15 +
.../node_modules/lodash/_arraySampleSize.js | 17 +
.../node_modules/lodash/_arrayShuffle.js | 15 +
.../node_modules/lodash/_arraySome.js | 23 +
.../node_modules/lodash/_asciiSize.js | 12 +
.../node_modules/lodash/_asciiToArray.js | 12 +
.../node_modules/lodash/_asciiWords.js | 15 +
.../node_modules/lodash/_assignMergeValue.js | 20 +
.../node_modules/lodash/_assignValue.js | 28 +
.../node_modules/lodash/_assocIndexOf.js | 21 +
.../node_modules/lodash/_baseAggregator.js | 21 +
.../node_modules/lodash/_baseAssign.js | 17 +
.../node_modules/lodash/_baseAssignIn.js | 17 +
.../node_modules/lodash/_baseAssignValue.js | 25 +
.../node_modules/lodash/_baseAt.js | 23 +
.../node_modules/lodash/_baseClamp.js | 22 +
.../node_modules/lodash/_baseClone.js | 153 +
.../node_modules/lodash/_baseConforms.js | 18 +
.../node_modules/lodash/_baseConformsTo.js | 27 +
.../node_modules/lodash/_baseCreate.js | 30 +
.../node_modules/lodash/_baseDelay.js | 21 +
.../node_modules/lodash/_baseDifference.js | 67 +
.../node_modules/lodash/_baseEach.js | 14 +
.../node_modules/lodash/_baseEachRight.js | 14 +
.../node_modules/lodash/_baseEvery.js | 21 +
.../node_modules/lodash/_baseExtremum.js | 32 +
.../node_modules/lodash/_baseFill.js | 32 +
.../node_modules/lodash/_baseFilter.js | 21 +
.../node_modules/lodash/_baseFindIndex.js | 24 +
.../node_modules/lodash/_baseFindKey.js | 23 +
.../node_modules/lodash/_baseFlatten.js | 38 +
.../node_modules/lodash/_baseFor.js | 16 +
.../node_modules/lodash/_baseForOwn.js | 16 +
.../node_modules/lodash/_baseForOwnRight.js | 16 +
.../node_modules/lodash/_baseForRight.js | 15 +
.../node_modules/lodash/_baseFunctions.js | 19 +
.../node_modules/lodash/_baseGet.js | 24 +
.../node_modules/lodash/_baseGetAllKeys.js | 20 +
.../node_modules/lodash/_baseGetTag.js | 28 +
.../node_modules/lodash/_baseGt.js | 14 +
.../node_modules/lodash/_baseHas.js | 19 +
.../node_modules/lodash/_baseHasIn.js | 13 +
.../node_modules/lodash/_baseInRange.js | 18 +
.../node_modules/lodash/_baseIndexOf.js | 20 +
.../node_modules/lodash/_baseIndexOfWith.js | 23 +
.../node_modules/lodash/_baseIntersection.js | 74 +
.../node_modules/lodash/_baseInverter.js | 21 +
.../node_modules/lodash/_baseInvoke.js | 24 +
.../node_modules/lodash/_baseIsArguments.js | 18 +
.../node_modules/lodash/_baseIsArrayBuffer.js | 17 +
.../node_modules/lodash/_baseIsDate.js | 18 +
.../node_modules/lodash/_baseIsEqual.js | 28 +
.../node_modules/lodash/_baseIsEqualDeep.js | 83 +
.../node_modules/lodash/_baseIsMap.js | 18 +
.../node_modules/lodash/_baseIsMatch.js | 62 +
.../node_modules/lodash/_baseIsNaN.js | 12 +
.../node_modules/lodash/_baseIsNative.js | 47 +
.../node_modules/lodash/_baseIsRegExp.js | 18 +
.../node_modules/lodash/_baseIsSet.js | 18 +
.../node_modules/lodash/_baseIsTypedArray.js | 60 +
.../node_modules/lodash/_baseIteratee.js | 31 +
.../node_modules/lodash/_baseKeys.js | 30 +
.../node_modules/lodash/_baseKeysIn.js | 33 +
.../node_modules/lodash/_baseLodash.js | 10 +
.../node_modules/lodash/_baseLt.js | 14 +
.../node_modules/lodash/_baseMap.js | 22 +
.../node_modules/lodash/_baseMatches.js | 22 +
.../lodash/_baseMatchesProperty.js | 33 +
.../node_modules/lodash/_baseMean.js | 20 +
.../node_modules/lodash/_baseMerge.js | 41 +
.../node_modules/lodash/_baseMergeDeep.js | 93 +
.../node_modules/lodash/_baseNth.js | 20 +
.../node_modules/lodash/_baseOrderBy.js | 34 +
.../node_modules/lodash/_basePick.js | 19 +
.../node_modules/lodash/_basePickBy.js | 30 +
.../node_modules/lodash/_baseProperty.js | 14 +
.../node_modules/lodash/_basePropertyDeep.js | 16 +
.../node_modules/lodash/_basePropertyOf.js | 14 +
.../node_modules/lodash/_basePullAll.js | 51 +
.../node_modules/lodash/_basePullAt.js | 37 +
.../node_modules/lodash/_baseRandom.js | 18 +
.../node_modules/lodash/_baseRange.js | 28 +
.../node_modules/lodash/_baseReduce.js | 23 +
.../node_modules/lodash/_baseRepeat.js | 35 +
.../node_modules/lodash/_baseRest.js | 17 +
.../node_modules/lodash/_baseSample.js | 15 +
.../node_modules/lodash/_baseSampleSize.js | 18 +
.../node_modules/lodash/_baseSet.js | 47 +
.../node_modules/lodash/_baseSetData.js | 17 +
.../node_modules/lodash/_baseSetToString.js | 22 +
.../node_modules/lodash/_baseShuffle.js | 15 +
.../node_modules/lodash/_baseSlice.js | 31 +
.../node_modules/lodash/_baseSome.js | 22 +
.../node_modules/lodash/_baseSortBy.js | 21 +
.../node_modules/lodash/_baseSortedIndex.js | 42 +
.../node_modules/lodash/_baseSortedIndexBy.js | 64 +
.../node_modules/lodash/_baseSortedUniq.js | 30 +
.../node_modules/lodash/_baseSum.js | 24 +
.../node_modules/lodash/_baseTimes.js | 20 +
.../node_modules/lodash/_baseToNumber.js | 24 +
.../node_modules/lodash/_baseToPairs.js | 18 +
.../node_modules/lodash/_baseToString.js | 37 +
.../node_modules/lodash/_baseUnary.js | 14 +
.../node_modules/lodash/_baseUniq.js | 72 +
.../node_modules/lodash/_baseUnset.js | 20 +
.../node_modules/lodash/_baseUpdate.js | 18 +
.../node_modules/lodash/_baseValues.js | 19 +
.../node_modules/lodash/_baseWhile.js | 26 +
.../node_modules/lodash/_baseWrapperValue.js | 25 +
.../node_modules/lodash/_baseXor.js | 36 +
.../node_modules/lodash/_baseZipObject.js | 23 +
.../node_modules/lodash/_cacheHas.js | 13 +
.../lodash/_castArrayLikeObject.js | 14 +
.../node_modules/lodash/_castFunction.js | 14 +
.../node_modules/lodash/_castPath.js | 21 +
.../node_modules/lodash/_castRest.js | 14 +
.../node_modules/lodash/_castSlice.js | 18 +
.../node_modules/lodash/_charsEndIndex.js | 19 +
.../node_modules/lodash/_charsStartIndex.js | 20 +
.../node_modules/lodash/_cloneArrayBuffer.js | 16 +
.../node_modules/lodash/_cloneBuffer.js | 35 +
.../node_modules/lodash/_cloneDataView.js | 16 +
.../node_modules/lodash/_cloneMap.js | 22 +
.../node_modules/lodash/_cloneRegExp.js | 17 +
.../node_modules/lodash/_cloneSet.js | 22 +
.../node_modules/lodash/_cloneSymbol.js | 18 +
.../node_modules/lodash/_cloneTypedArray.js | 16 +
.../node_modules/lodash/_compareAscending.js | 41 +
.../node_modules/lodash/_compareMultiple.js | 44 +
.../node_modules/lodash/_composeArgs.js | 39 +
.../node_modules/lodash/_composeArgsRight.js | 41 +
.../node_modules/lodash/_copyArray.js | 20 +
.../node_modules/lodash/_copyObject.js | 40 +
.../node_modules/lodash/_copySymbols.js | 16 +
.../node_modules/lodash/_copySymbolsIn.js | 16 +
.../node_modules/lodash/_coreJsData.js | 6 +
.../node_modules/lodash/_countHolders.js | 21 +
.../node_modules/lodash/_createAggregator.js | 23 +
.../node_modules/lodash/_createAssigner.js | 37 +
.../node_modules/lodash/_createBaseEach.js | 32 +
.../node_modules/lodash/_createBaseFor.js | 25 +
.../node_modules/lodash/_createBind.js | 28 +
.../node_modules/lodash/_createCaseFirst.js | 33 +
.../node_modules/lodash/_createCompounder.js | 24 +
.../node_modules/lodash/_createCtor.js | 37 +
.../node_modules/lodash/_createCurry.js | 46 +
.../node_modules/lodash/_createFind.js | 25 +
.../node_modules/lodash/_createFlow.js | 78 +
.../node_modules/lodash/_createHybrid.js | 92 +
.../node_modules/lodash/_createInverter.js | 17 +
.../lodash/_createMathOperation.js | 38 +
.../node_modules/lodash/_createOver.js | 27 +
.../node_modules/lodash/_createPadding.js | 33 +
.../node_modules/lodash/_createPartial.js | 43 +
.../node_modules/lodash/_createRange.js | 30 +
.../node_modules/lodash/_createRecurry.js | 56 +
.../lodash/_createRelationalOperation.js | 20 +
.../node_modules/lodash/_createRound.js | 33 +
.../node_modules/lodash/_createSet.js | 19 +
.../node_modules/lodash/_createToPairs.js | 30 +
.../node_modules/lodash/_createWrap.js | 106 +
.../lodash/_customDefaultsAssignIn.js | 29 +
.../lodash/_customDefaultsMerge.js | 28 +
.../node_modules/lodash/_customOmitClone.js | 16 +
.../node_modules/lodash/_deburrLetter.js | 71 +
.../node_modules/lodash/_defineProperty.js | 11 +
.../node_modules/lodash/_equalArrays.js | 83 +
.../node_modules/lodash/_equalByTag.js | 112 +
.../node_modules/lodash/_equalObjects.js | 89 +
.../node_modules/lodash/_escapeHtmlChar.js | 21 +
.../node_modules/lodash/_escapeStringChar.js | 22 +
.../node_modules/lodash/_flatRest.js | 16 +
.../node_modules/lodash/_freeGlobal.js | 4 +
.../node_modules/lodash/_getAllKeys.js | 16 +
.../node_modules/lodash/_getAllKeysIn.js | 17 +
.../node_modules/lodash/_getData.js | 15 +
.../node_modules/lodash/_getFuncName.js | 31 +
.../node_modules/lodash/_getHolder.js | 13 +
.../node_modules/lodash/_getMapData.js | 18 +
.../node_modules/lodash/_getMatchData.js | 24 +
.../node_modules/lodash/_getNative.js | 17 +
.../node_modules/lodash/_getPrototype.js | 6 +
.../node_modules/lodash/_getRawTag.js | 46 +
.../node_modules/lodash/_getSymbols.js | 30 +
.../node_modules/lodash/_getSymbolsIn.js | 25 +
.../node_modules/lodash/_getTag.js | 58 +
.../node_modules/lodash/_getValue.js | 13 +
.../node_modules/lodash/_getView.js | 33 +
.../node_modules/lodash/_getWrapDetails.js | 17 +
.../node_modules/lodash/_hasPath.js | 39 +
.../node_modules/lodash/_hasUnicode.js | 26 +
.../node_modules/lodash/_hasUnicodeWord.js | 15 +
.../node_modules/lodash/_hashClear.js | 15 +
.../node_modules/lodash/_hashDelete.js | 17 +
.../node_modules/lodash/_hashGet.js | 30 +
.../node_modules/lodash/_hashHas.js | 23 +
.../node_modules/lodash/_hashSet.js | 23 +
.../node_modules/lodash/_initCloneArray.js | 26 +
.../node_modules/lodash/_initCloneByTag.js | 80 +
.../node_modules/lodash/_initCloneObject.js | 18 +
.../node_modules/lodash/_insertWrapDetails.js | 23 +
.../node_modules/lodash/_isFlattenable.js | 20 +
.../node_modules/lodash/_isIndex.js | 22 +
.../node_modules/lodash/_isIterateeCall.js | 30 +
.../node_modules/lodash/_isKey.js | 29 +
.../node_modules/lodash/_isKeyable.js | 15 +
.../node_modules/lodash/_isLaziable.js | 28 +
.../node_modules/lodash/_isMaskable.js | 14 +
.../node_modules/lodash/_isMasked.js | 20 +
.../node_modules/lodash/_isPrototype.js | 18 +
.../lodash/_isStrictComparable.js | 15 +
.../node_modules/lodash/_iteratorToArray.js | 18 +
.../node_modules/lodash/_lazyClone.js | 23 +
.../node_modules/lodash/_lazyReverse.js | 23 +
.../node_modules/lodash/_lazyValue.js | 69 +
.../node_modules/lodash/_listCacheClear.js | 13 +
.../node_modules/lodash/_listCacheDelete.js | 35 +
.../node_modules/lodash/_listCacheGet.js | 19 +
.../node_modules/lodash/_listCacheHas.js | 16 +
.../node_modules/lodash/_listCacheSet.js | 26 +
.../node_modules/lodash/_mapCacheClear.js | 21 +
.../node_modules/lodash/_mapCacheDelete.js | 18 +
.../node_modules/lodash/_mapCacheGet.js | 16 +
.../node_modules/lodash/_mapCacheHas.js | 16 +
.../node_modules/lodash/_mapCacheSet.js | 22 +
.../node_modules/lodash/_mapToArray.js | 18 +
.../lodash/_matchesStrictComparable.js | 20 +
.../node_modules/lodash/_memoizeCapped.js | 26 +
.../node_modules/lodash/_mergeData.js | 90 +
.../node_modules/lodash/_metaMap.js | 6 +
.../node_modules/lodash/_nativeCreate.js | 6 +
.../node_modules/lodash/_nativeKeys.js | 6 +
.../node_modules/lodash/_nativeKeysIn.js | 20 +
.../node_modules/lodash/_nodeUtil.js | 22 +
.../node_modules/lodash/_objectToString.js | 22 +
.../node_modules/lodash/_overArg.js | 15 +
.../node_modules/lodash/_overRest.js | 36 +
.../node_modules/lodash/_parent.js | 16 +
.../node_modules/lodash/_reEscape.js | 4 +
.../node_modules/lodash/_reEvaluate.js | 4 +
.../node_modules/lodash/_reInterpolate.js | 4 +
.../node_modules/lodash/_realNames.js | 4 +
.../node_modules/lodash/_reorder.js | 29 +
.../node_modules/lodash/_replaceHolders.js | 29 +
.../node_modules/lodash/_root.js | 9 +
.../node_modules/lodash/_setCacheAdd.js | 19 +
.../node_modules/lodash/_setCacheHas.js | 14 +
.../node_modules/lodash/_setData.js | 20 +
.../node_modules/lodash/_setToArray.js | 18 +
.../node_modules/lodash/_setToPairs.js | 18 +
.../node_modules/lodash/_setToString.js | 14 +
.../node_modules/lodash/_setWrapToString.js | 21 +
.../node_modules/lodash/_shortOut.js | 37 +
.../node_modules/lodash/_shuffleSelf.js | 28 +
.../node_modules/lodash/_stackClear.js | 15 +
.../node_modules/lodash/_stackDelete.js | 18 +
.../node_modules/lodash/_stackGet.js | 14 +
.../node_modules/lodash/_stackHas.js | 14 +
.../node_modules/lodash/_stackSet.js | 34 +
.../node_modules/lodash/_strictIndexOf.js | 23 +
.../node_modules/lodash/_strictLastIndexOf.js | 21 +
.../node_modules/lodash/_stringSize.js | 18 +
.../node_modules/lodash/_stringToArray.js | 18 +
.../node_modules/lodash/_stringToPath.js | 28 +
.../node_modules/lodash/_toKey.js | 21 +
.../node_modules/lodash/_toSource.js | 26 +
.../node_modules/lodash/_unescapeHtmlChar.js | 21 +
.../node_modules/lodash/_unicodeSize.js | 44 +
.../node_modules/lodash/_unicodeToArray.js | 40 +
.../node_modules/lodash/_unicodeWords.js | 69 +
.../node_modules/lodash/_updateWrapDetails.js | 46 +
.../node_modules/lodash/_wrapperClone.js | 23 +
.../sequelize-cli/node_modules/lodash/add.js | 22 +
.../node_modules/lodash/after.js | 42 +
.../node_modules/lodash/array.js | 67 +
.../sequelize-cli/node_modules/lodash/ary.js | 29 +
.../node_modules/lodash/assign.js | 58 +
.../node_modules/lodash/assignIn.js | 40 +
.../node_modules/lodash/assignInWith.js | 38 +
.../node_modules/lodash/assignWith.js | 37 +
.../sequelize-cli/node_modules/lodash/at.js | 23 +
.../node_modules/lodash/attempt.js | 35 +
.../node_modules/lodash/before.js | 40 +
.../sequelize-cli/node_modules/lodash/bind.js | 57 +
.../node_modules/lodash/bindAll.js | 41 +
.../node_modules/lodash/bindKey.js | 68 +
.../node_modules/lodash/camelCase.js | 29 +
.../node_modules/lodash/capitalize.js | 23 +
.../node_modules/lodash/castArray.js | 44 +
.../sequelize-cli/node_modules/lodash/ceil.js | 26 +
.../node_modules/lodash/chain.js | 38 +
.../node_modules/lodash/chunk.js | 50 +
.../node_modules/lodash/clamp.js | 39 +
.../node_modules/lodash/clone.js | 36 +
.../node_modules/lodash/cloneDeep.js | 29 +
.../node_modules/lodash/cloneDeepWith.js | 40 +
.../node_modules/lodash/cloneWith.js | 42 +
.../node_modules/lodash/collection.js | 30 +
.../node_modules/lodash/commit.js | 33 +
.../node_modules/lodash/compact.js | 31 +
.../node_modules/lodash/concat.js | 43 +
.../sequelize-cli/node_modules/lodash/cond.js | 60 +
.../node_modules/lodash/conforms.js | 35 +
.../node_modules/lodash/conformsTo.js | 32 +
.../node_modules/lodash/constant.js | 26 +
.../sequelize-cli/node_modules/lodash/core.js | 3836 +
.../node_modules/lodash/core.min.js | 29 +
.../node_modules/lodash/countBy.js | 40 +
.../node_modules/lodash/create.js | 43 +
.../node_modules/lodash/curry.js | 57 +
.../node_modules/lodash/curryRight.js | 54 +
.../sequelize-cli/node_modules/lodash/date.js | 3 +
.../node_modules/lodash/debounce.js | 188 +
.../node_modules/lodash/deburr.js | 45 +
.../node_modules/lodash/defaultTo.js | 25 +
.../node_modules/lodash/defaults.js | 32 +
.../node_modules/lodash/defaultsDeep.js | 30 +
.../node_modules/lodash/defer.js | 26 +
.../node_modules/lodash/delay.js | 28 +
.../node_modules/lodash/difference.js | 33 +
.../node_modules/lodash/differenceBy.js | 44 +
.../node_modules/lodash/differenceWith.js | 40 +
.../node_modules/lodash/divide.js | 22 +
.../sequelize-cli/node_modules/lodash/drop.js | 38 +
.../node_modules/lodash/dropRight.js | 39 +
.../node_modules/lodash/dropRightWhile.js | 45 +
.../node_modules/lodash/dropWhile.js | 45 +
.../sequelize-cli/node_modules/lodash/each.js | 1 +
.../node_modules/lodash/eachRight.js | 1 +
.../node_modules/lodash/endsWith.js | 43 +
.../node_modules/lodash/entries.js | 1 +
.../node_modules/lodash/entriesIn.js | 1 +
.../sequelize-cli/node_modules/lodash/eq.js | 37 +
.../node_modules/lodash/escape.js | 43 +
.../node_modules/lodash/escapeRegExp.js | 32 +
.../node_modules/lodash/every.js | 56 +
.../node_modules/lodash/extend.js | 1 +
.../node_modules/lodash/extendWith.js | 1 +
.../sequelize-cli/node_modules/lodash/fill.js | 45 +
.../node_modules/lodash/filter.js | 48 +
.../sequelize-cli/node_modules/lodash/find.js | 42 +
.../node_modules/lodash/findIndex.js | 55 +
.../node_modules/lodash/findKey.js | 44 +
.../node_modules/lodash/findLast.js | 25 +
.../node_modules/lodash/findLastIndex.js | 59 +
.../node_modules/lodash/findLastKey.js | 44 +
.../node_modules/lodash/first.js | 1 +
.../node_modules/lodash/flatMap.js | 29 +
.../node_modules/lodash/flatMapDeep.js | 31 +
.../node_modules/lodash/flatMapDepth.js | 31 +
.../node_modules/lodash/flatten.js | 22 +
.../node_modules/lodash/flattenDeep.js | 25 +
.../node_modules/lodash/flattenDepth.js | 33 +
.../sequelize-cli/node_modules/lodash/flip.js | 28 +
.../node_modules/lodash/floor.js | 26 +
.../sequelize-cli/node_modules/lodash/flow.js | 27 +
.../node_modules/lodash/flowRight.js | 26 +
.../node_modules/lodash/forEach.js | 41 +
.../node_modules/lodash/forEachRight.js | 31 +
.../node_modules/lodash/forIn.js | 39 +
.../node_modules/lodash/forInRight.js | 37 +
.../node_modules/lodash/forOwn.js | 36 +
.../node_modules/lodash/forOwnRight.js | 34 +
.../sequelize-cli/node_modules/lodash/fp.js | 2 +
.../sequelize-cli/node_modules/lodash/fp/F.js | 1 +
.../sequelize-cli/node_modules/lodash/fp/T.js | 1 +
.../node_modules/lodash/fp/__.js | 1 +
.../node_modules/lodash/fp/_baseConvert.js | 568 +
.../node_modules/lodash/fp/_convertBrowser.js | 18 +
.../node_modules/lodash/fp/_falseOptions.js | 7 +
.../node_modules/lodash/fp/_mapping.js | 368 +
.../node_modules/lodash/fp/_util.js | 14 +
.../node_modules/lodash/fp/add.js | 5 +
.../node_modules/lodash/fp/after.js | 5 +
.../node_modules/lodash/fp/all.js | 1 +
.../node_modules/lodash/fp/allPass.js | 1 +
.../node_modules/lodash/fp/always.js | 1 +
.../node_modules/lodash/fp/any.js | 1 +
.../node_modules/lodash/fp/anyPass.js | 1 +
.../node_modules/lodash/fp/apply.js | 1 +
.../node_modules/lodash/fp/array.js | 2 +
.../node_modules/lodash/fp/ary.js | 5 +
.../node_modules/lodash/fp/assign.js | 5 +
.../node_modules/lodash/fp/assignAll.js | 5 +
.../node_modules/lodash/fp/assignAllWith.js | 5 +
.../node_modules/lodash/fp/assignIn.js | 5 +
.../node_modules/lodash/fp/assignInAll.js | 5 +
.../node_modules/lodash/fp/assignInAllWith.js | 5 +
.../node_modules/lodash/fp/assignInWith.js | 5 +
.../node_modules/lodash/fp/assignWith.js | 5 +
.../node_modules/lodash/fp/assoc.js | 1 +
.../node_modules/lodash/fp/assocPath.js | 1 +
.../node_modules/lodash/fp/at.js | 5 +
.../node_modules/lodash/fp/attempt.js | 5 +
.../node_modules/lodash/fp/before.js | 5 +
.../node_modules/lodash/fp/bind.js | 5 +
.../node_modules/lodash/fp/bindAll.js | 5 +
.../node_modules/lodash/fp/bindKey.js | 5 +
.../node_modules/lodash/fp/camelCase.js | 5 +
.../node_modules/lodash/fp/capitalize.js | 5 +
.../node_modules/lodash/fp/castArray.js | 5 +
.../node_modules/lodash/fp/ceil.js | 5 +
.../node_modules/lodash/fp/chain.js | 5 +
.../node_modules/lodash/fp/chunk.js | 5 +
.../node_modules/lodash/fp/clamp.js | 5 +
.../node_modules/lodash/fp/clone.js | 5 +
.../node_modules/lodash/fp/cloneDeep.js | 5 +
.../node_modules/lodash/fp/cloneDeepWith.js | 5 +
.../node_modules/lodash/fp/cloneWith.js | 5 +
.../node_modules/lodash/fp/collection.js | 2 +
.../node_modules/lodash/fp/commit.js | 5 +
.../node_modules/lodash/fp/compact.js | 5 +
.../node_modules/lodash/fp/complement.js | 1 +
.../node_modules/lodash/fp/compose.js | 1 +
.../node_modules/lodash/fp/concat.js | 5 +
.../node_modules/lodash/fp/cond.js | 5 +
.../node_modules/lodash/fp/conforms.js | 1 +
.../node_modules/lodash/fp/conformsTo.js | 5 +
.../node_modules/lodash/fp/constant.js | 5 +
.../node_modules/lodash/fp/contains.js | 1 +
.../node_modules/lodash/fp/convert.js | 18 +
.../node_modules/lodash/fp/countBy.js | 5 +
.../node_modules/lodash/fp/create.js | 5 +
.../node_modules/lodash/fp/curry.js | 5 +
.../node_modules/lodash/fp/curryN.js | 5 +
.../node_modules/lodash/fp/curryRight.js | 5 +
.../node_modules/lodash/fp/curryRightN.js | 5 +
.../node_modules/lodash/fp/date.js | 2 +
.../node_modules/lodash/fp/debounce.js | 5 +
.../node_modules/lodash/fp/deburr.js | 5 +
.../node_modules/lodash/fp/defaultTo.js | 5 +
.../node_modules/lodash/fp/defaults.js | 5 +
.../node_modules/lodash/fp/defaultsAll.js | 5 +
.../node_modules/lodash/fp/defaultsDeep.js | 5 +
.../node_modules/lodash/fp/defaultsDeepAll.js | 5 +
.../node_modules/lodash/fp/defer.js | 5 +
.../node_modules/lodash/fp/delay.js | 5 +
.../node_modules/lodash/fp/difference.js | 5 +
.../node_modules/lodash/fp/differenceBy.js | 5 +
.../node_modules/lodash/fp/differenceWith.js | 5 +
.../node_modules/lodash/fp/dissoc.js | 1 +
.../node_modules/lodash/fp/dissocPath.js | 1 +
.../node_modules/lodash/fp/divide.js | 5 +
.../node_modules/lodash/fp/drop.js | 5 +
.../node_modules/lodash/fp/dropLast.js | 1 +
.../node_modules/lodash/fp/dropLastWhile.js | 1 +
.../node_modules/lodash/fp/dropRight.js | 5 +
.../node_modules/lodash/fp/dropRightWhile.js | 5 +
.../node_modules/lodash/fp/dropWhile.js | 5 +
.../node_modules/lodash/fp/each.js | 1 +
.../node_modules/lodash/fp/eachRight.js | 1 +
.../node_modules/lodash/fp/endsWith.js | 5 +
.../node_modules/lodash/fp/entries.js | 1 +
.../node_modules/lodash/fp/entriesIn.js | 1 +
.../node_modules/lodash/fp/eq.js | 5 +
.../node_modules/lodash/fp/equals.js | 1 +
.../node_modules/lodash/fp/escape.js | 5 +
.../node_modules/lodash/fp/escapeRegExp.js | 5 +
.../node_modules/lodash/fp/every.js | 5 +
.../node_modules/lodash/fp/extend.js | 1 +
.../node_modules/lodash/fp/extendAll.js | 1 +
.../node_modules/lodash/fp/extendAllWith.js | 1 +
.../node_modules/lodash/fp/extendWith.js | 1 +
.../node_modules/lodash/fp/fill.js | 5 +
.../node_modules/lodash/fp/filter.js | 5 +
.../node_modules/lodash/fp/find.js | 5 +
.../node_modules/lodash/fp/findFrom.js | 5 +
.../node_modules/lodash/fp/findIndex.js | 5 +
.../node_modules/lodash/fp/findIndexFrom.js | 5 +
.../node_modules/lodash/fp/findKey.js | 5 +
.../node_modules/lodash/fp/findLast.js | 5 +
.../node_modules/lodash/fp/findLastFrom.js | 5 +
.../node_modules/lodash/fp/findLastIndex.js | 5 +
.../lodash/fp/findLastIndexFrom.js | 5 +
.../node_modules/lodash/fp/findLastKey.js | 5 +
.../node_modules/lodash/fp/first.js | 1 +
.../node_modules/lodash/fp/flatMap.js | 5 +
.../node_modules/lodash/fp/flatMapDeep.js | 5 +
.../node_modules/lodash/fp/flatMapDepth.js | 5 +
.../node_modules/lodash/fp/flatten.js | 5 +
.../node_modules/lodash/fp/flattenDeep.js | 5 +
.../node_modules/lodash/fp/flattenDepth.js | 5 +
.../node_modules/lodash/fp/flip.js | 5 +
.../node_modules/lodash/fp/floor.js | 5 +
.../node_modules/lodash/fp/flow.js | 5 +
.../node_modules/lodash/fp/flowRight.js | 5 +
.../node_modules/lodash/fp/forEach.js | 5 +
.../node_modules/lodash/fp/forEachRight.js | 5 +
.../node_modules/lodash/fp/forIn.js | 5 +
.../node_modules/lodash/fp/forInRight.js | 5 +
.../node_modules/lodash/fp/forOwn.js | 5 +
.../node_modules/lodash/fp/forOwnRight.js | 5 +
.../node_modules/lodash/fp/fromPairs.js | 5 +
.../node_modules/lodash/fp/function.js | 2 +
.../node_modules/lodash/fp/functions.js | 5 +
.../node_modules/lodash/fp/functionsIn.js | 5 +
.../node_modules/lodash/fp/get.js | 5 +
.../node_modules/lodash/fp/getOr.js | 5 +
.../node_modules/lodash/fp/groupBy.js | 5 +
.../node_modules/lodash/fp/gt.js | 5 +
.../node_modules/lodash/fp/gte.js | 5 +
.../node_modules/lodash/fp/has.js | 5 +
.../node_modules/lodash/fp/hasIn.js | 5 +
.../node_modules/lodash/fp/head.js | 5 +
.../node_modules/lodash/fp/identical.js | 1 +
.../node_modules/lodash/fp/identity.js | 5 +
.../node_modules/lodash/fp/inRange.js | 5 +
.../node_modules/lodash/fp/includes.js | 5 +
.../node_modules/lodash/fp/includesFrom.js | 5 +
.../node_modules/lodash/fp/indexBy.js | 1 +
.../node_modules/lodash/fp/indexOf.js | 5 +
.../node_modules/lodash/fp/indexOfFrom.js | 5 +
.../node_modules/lodash/fp/init.js | 1 +
.../node_modules/lodash/fp/initial.js | 5 +
.../node_modules/lodash/fp/intersection.js | 5 +
.../node_modules/lodash/fp/intersectionBy.js | 5 +
.../lodash/fp/intersectionWith.js | 5 +
.../node_modules/lodash/fp/invert.js | 5 +
.../node_modules/lodash/fp/invertBy.js | 5 +
.../node_modules/lodash/fp/invertObj.js | 1 +
.../node_modules/lodash/fp/invoke.js | 5 +
.../node_modules/lodash/fp/invokeArgs.js | 5 +
.../node_modules/lodash/fp/invokeArgsMap.js | 5 +
.../node_modules/lodash/fp/invokeMap.js | 5 +
.../node_modules/lodash/fp/isArguments.js | 5 +
.../node_modules/lodash/fp/isArray.js | 5 +
.../node_modules/lodash/fp/isArrayBuffer.js | 5 +
.../node_modules/lodash/fp/isArrayLike.js | 5 +
.../lodash/fp/isArrayLikeObject.js | 5 +
.../node_modules/lodash/fp/isBoolean.js | 5 +
.../node_modules/lodash/fp/isBuffer.js | 5 +
.../node_modules/lodash/fp/isDate.js | 5 +
.../node_modules/lodash/fp/isElement.js | 5 +
.../node_modules/lodash/fp/isEmpty.js | 5 +
.../node_modules/lodash/fp/isEqual.js | 5 +
.../node_modules/lodash/fp/isEqualWith.js | 5 +
.../node_modules/lodash/fp/isError.js | 5 +
.../node_modules/lodash/fp/isFinite.js | 5 +
.../node_modules/lodash/fp/isFunction.js | 5 +
.../node_modules/lodash/fp/isInteger.js | 5 +
.../node_modules/lodash/fp/isLength.js | 5 +
.../node_modules/lodash/fp/isMap.js | 5 +
.../node_modules/lodash/fp/isMatch.js | 5 +
.../node_modules/lodash/fp/isMatchWith.js | 5 +
.../node_modules/lodash/fp/isNaN.js | 5 +
.../node_modules/lodash/fp/isNative.js | 5 +
.../node_modules/lodash/fp/isNil.js | 5 +
.../node_modules/lodash/fp/isNull.js | 5 +
.../node_modules/lodash/fp/isNumber.js | 5 +
.../node_modules/lodash/fp/isObject.js | 5 +
.../node_modules/lodash/fp/isObjectLike.js | 5 +
.../node_modules/lodash/fp/isPlainObject.js | 5 +
.../node_modules/lodash/fp/isRegExp.js | 5 +
.../node_modules/lodash/fp/isSafeInteger.js | 5 +
.../node_modules/lodash/fp/isSet.js | 5 +
.../node_modules/lodash/fp/isString.js | 5 +
.../node_modules/lodash/fp/isSymbol.js | 5 +
.../node_modules/lodash/fp/isTypedArray.js | 5 +
.../node_modules/lodash/fp/isUndefined.js | 5 +
.../node_modules/lodash/fp/isWeakMap.js | 5 +
.../node_modules/lodash/fp/isWeakSet.js | 5 +
.../node_modules/lodash/fp/iteratee.js | 5 +
.../node_modules/lodash/fp/join.js | 5 +
.../node_modules/lodash/fp/juxt.js | 1 +
.../node_modules/lodash/fp/kebabCase.js | 5 +
.../node_modules/lodash/fp/keyBy.js | 5 +
.../node_modules/lodash/fp/keys.js | 5 +
.../node_modules/lodash/fp/keysIn.js | 5 +
.../node_modules/lodash/fp/lang.js | 2 +
.../node_modules/lodash/fp/last.js | 5 +
.../node_modules/lodash/fp/lastIndexOf.js | 5 +
.../node_modules/lodash/fp/lastIndexOfFrom.js | 5 +
.../node_modules/lodash/fp/lowerCase.js | 5 +
.../node_modules/lodash/fp/lowerFirst.js | 5 +
.../node_modules/lodash/fp/lt.js | 5 +
.../node_modules/lodash/fp/lte.js | 5 +
.../node_modules/lodash/fp/map.js | 5 +
.../node_modules/lodash/fp/mapKeys.js | 5 +
.../node_modules/lodash/fp/mapValues.js | 5 +
.../node_modules/lodash/fp/matches.js | 1 +
.../node_modules/lodash/fp/matchesProperty.js | 5 +
.../node_modules/lodash/fp/math.js | 2 +
.../node_modules/lodash/fp/max.js | 5 +
.../node_modules/lodash/fp/maxBy.js | 5 +
.../node_modules/lodash/fp/mean.js | 5 +
.../node_modules/lodash/fp/meanBy.js | 5 +
.../node_modules/lodash/fp/memoize.js | 5 +
.../node_modules/lodash/fp/merge.js | 5 +
.../node_modules/lodash/fp/mergeAll.js | 5 +
.../node_modules/lodash/fp/mergeAllWith.js | 5 +
.../node_modules/lodash/fp/mergeWith.js | 5 +
.../node_modules/lodash/fp/method.js | 5 +
.../node_modules/lodash/fp/methodOf.js | 5 +
.../node_modules/lodash/fp/min.js | 5 +
.../node_modules/lodash/fp/minBy.js | 5 +
.../node_modules/lodash/fp/mixin.js | 5 +
.../node_modules/lodash/fp/multiply.js | 5 +
.../node_modules/lodash/fp/nAry.js | 1 +
.../node_modules/lodash/fp/negate.js | 5 +
.../node_modules/lodash/fp/next.js | 5 +
.../node_modules/lodash/fp/noop.js | 5 +
.../node_modules/lodash/fp/now.js | 5 +
.../node_modules/lodash/fp/nth.js | 5 +
.../node_modules/lodash/fp/nthArg.js | 5 +
.../node_modules/lodash/fp/number.js | 2 +
.../node_modules/lodash/fp/object.js | 2 +
.../node_modules/lodash/fp/omit.js | 5 +
.../node_modules/lodash/fp/omitAll.js | 1 +
.../node_modules/lodash/fp/omitBy.js | 5 +
.../node_modules/lodash/fp/once.js | 5 +
.../node_modules/lodash/fp/orderBy.js | 5 +
.../node_modules/lodash/fp/over.js | 5 +
.../node_modules/lodash/fp/overArgs.js | 5 +
.../node_modules/lodash/fp/overEvery.js | 5 +
.../node_modules/lodash/fp/overSome.js | 5 +
.../node_modules/lodash/fp/pad.js | 5 +
.../node_modules/lodash/fp/padChars.js | 5 +
.../node_modules/lodash/fp/padCharsEnd.js | 5 +
.../node_modules/lodash/fp/padCharsStart.js | 5 +
.../node_modules/lodash/fp/padEnd.js | 5 +
.../node_modules/lodash/fp/padStart.js | 5 +
.../node_modules/lodash/fp/parseInt.js | 5 +
.../node_modules/lodash/fp/partial.js | 5 +
.../node_modules/lodash/fp/partialRight.js | 5 +
.../node_modules/lodash/fp/partition.js | 5 +
.../node_modules/lodash/fp/path.js | 1 +
.../node_modules/lodash/fp/pathEq.js | 1 +
.../node_modules/lodash/fp/pathOr.js | 1 +
.../node_modules/lodash/fp/paths.js | 1 +
.../node_modules/lodash/fp/pick.js | 5 +
.../node_modules/lodash/fp/pickAll.js | 1 +
.../node_modules/lodash/fp/pickBy.js | 5 +
.../node_modules/lodash/fp/pipe.js | 1 +
.../node_modules/lodash/fp/placeholder.js | 6 +
.../node_modules/lodash/fp/plant.js | 5 +
.../node_modules/lodash/fp/pluck.js | 1 +
.../node_modules/lodash/fp/prop.js | 1 +
.../node_modules/lodash/fp/propEq.js | 1 +
.../node_modules/lodash/fp/propOr.js | 1 +
.../node_modules/lodash/fp/property.js | 1 +
.../node_modules/lodash/fp/propertyOf.js | 5 +
.../node_modules/lodash/fp/props.js | 1 +
.../node_modules/lodash/fp/pull.js | 5 +
.../node_modules/lodash/fp/pullAll.js | 5 +
.../node_modules/lodash/fp/pullAllBy.js | 5 +
.../node_modules/lodash/fp/pullAllWith.js | 5 +
.../node_modules/lodash/fp/pullAt.js | 5 +
.../node_modules/lodash/fp/random.js | 5 +
.../node_modules/lodash/fp/range.js | 5 +
.../node_modules/lodash/fp/rangeRight.js | 5 +
.../node_modules/lodash/fp/rangeStep.js | 5 +
.../node_modules/lodash/fp/rangeStepRight.js | 5 +
.../node_modules/lodash/fp/rearg.js | 5 +
.../node_modules/lodash/fp/reduce.js | 5 +
.../node_modules/lodash/fp/reduceRight.js | 5 +
.../node_modules/lodash/fp/reject.js | 5 +
.../node_modules/lodash/fp/remove.js | 5 +
.../node_modules/lodash/fp/repeat.js | 5 +
.../node_modules/lodash/fp/replace.js | 5 +
.../node_modules/lodash/fp/rest.js | 5 +
.../node_modules/lodash/fp/restFrom.js | 5 +
.../node_modules/lodash/fp/result.js | 5 +
.../node_modules/lodash/fp/reverse.js | 5 +
.../node_modules/lodash/fp/round.js | 5 +
.../node_modules/lodash/fp/sample.js | 5 +
.../node_modules/lodash/fp/sampleSize.js | 5 +
.../node_modules/lodash/fp/seq.js | 2 +
.../node_modules/lodash/fp/set.js | 5 +
.../node_modules/lodash/fp/setWith.js | 5 +
.../node_modules/lodash/fp/shuffle.js | 5 +
.../node_modules/lodash/fp/size.js | 5 +
.../node_modules/lodash/fp/slice.js | 5 +
.../node_modules/lodash/fp/snakeCase.js | 5 +
.../node_modules/lodash/fp/some.js | 5 +
.../node_modules/lodash/fp/sortBy.js | 5 +
.../node_modules/lodash/fp/sortedIndex.js | 5 +
.../node_modules/lodash/fp/sortedIndexBy.js | 5 +
.../node_modules/lodash/fp/sortedIndexOf.js | 5 +
.../node_modules/lodash/fp/sortedLastIndex.js | 5 +
.../lodash/fp/sortedLastIndexBy.js | 5 +
.../lodash/fp/sortedLastIndexOf.js | 5 +
.../node_modules/lodash/fp/sortedUniq.js | 5 +
.../node_modules/lodash/fp/sortedUniqBy.js | 5 +
.../node_modules/lodash/fp/split.js | 5 +
.../node_modules/lodash/fp/spread.js | 5 +
.../node_modules/lodash/fp/spreadFrom.js | 5 +
.../node_modules/lodash/fp/startCase.js | 5 +
.../node_modules/lodash/fp/startsWith.js | 5 +
.../node_modules/lodash/fp/string.js | 2 +
.../node_modules/lodash/fp/stubArray.js | 5 +
.../node_modules/lodash/fp/stubFalse.js | 5 +
.../node_modules/lodash/fp/stubObject.js | 5 +
.../node_modules/lodash/fp/stubString.js | 5 +
.../node_modules/lodash/fp/stubTrue.js | 5 +
.../node_modules/lodash/fp/subtract.js | 5 +
.../node_modules/lodash/fp/sum.js | 5 +
.../node_modules/lodash/fp/sumBy.js | 5 +
.../lodash/fp/symmetricDifference.js | 1 +
.../lodash/fp/symmetricDifferenceBy.js | 1 +
.../lodash/fp/symmetricDifferenceWith.js | 1 +
.../node_modules/lodash/fp/tail.js | 5 +
.../node_modules/lodash/fp/take.js | 5 +
.../node_modules/lodash/fp/takeLast.js | 1 +
.../node_modules/lodash/fp/takeLastWhile.js | 1 +
.../node_modules/lodash/fp/takeRight.js | 5 +
.../node_modules/lodash/fp/takeRightWhile.js | 5 +
.../node_modules/lodash/fp/takeWhile.js | 5 +
.../node_modules/lodash/fp/tap.js | 5 +
.../node_modules/lodash/fp/template.js | 5 +
.../lodash/fp/templateSettings.js | 5 +
.../node_modules/lodash/fp/throttle.js | 5 +
.../node_modules/lodash/fp/thru.js | 5 +
.../node_modules/lodash/fp/times.js | 5 +
.../node_modules/lodash/fp/toArray.js | 5 +
.../node_modules/lodash/fp/toFinite.js | 5 +
.../node_modules/lodash/fp/toInteger.js | 5 +
.../node_modules/lodash/fp/toIterator.js | 5 +
.../node_modules/lodash/fp/toJSON.js | 5 +
.../node_modules/lodash/fp/toLength.js | 5 +
.../node_modules/lodash/fp/toLower.js | 5 +
.../node_modules/lodash/fp/toNumber.js | 5 +
.../node_modules/lodash/fp/toPairs.js | 5 +
.../node_modules/lodash/fp/toPairsIn.js | 5 +
.../node_modules/lodash/fp/toPath.js | 5 +
.../node_modules/lodash/fp/toPlainObject.js | 5 +
.../node_modules/lodash/fp/toSafeInteger.js | 5 +
.../node_modules/lodash/fp/toString.js | 5 +
.../node_modules/lodash/fp/toUpper.js | 5 +
.../node_modules/lodash/fp/transform.js | 5 +
.../node_modules/lodash/fp/trim.js | 5 +
.../node_modules/lodash/fp/trimChars.js | 5 +
.../node_modules/lodash/fp/trimCharsEnd.js | 5 +
.../node_modules/lodash/fp/trimCharsStart.js | 5 +
.../node_modules/lodash/fp/trimEnd.js | 5 +
.../node_modules/lodash/fp/trimStart.js | 5 +
.../node_modules/lodash/fp/truncate.js | 5 +
.../node_modules/lodash/fp/unapply.js | 1 +
.../node_modules/lodash/fp/unary.js | 5 +
.../node_modules/lodash/fp/unescape.js | 5 +
.../node_modules/lodash/fp/union.js | 5 +
.../node_modules/lodash/fp/unionBy.js | 5 +
.../node_modules/lodash/fp/unionWith.js | 5 +
.../node_modules/lodash/fp/uniq.js | 5 +
.../node_modules/lodash/fp/uniqBy.js | 5 +
.../node_modules/lodash/fp/uniqWith.js | 5 +
.../node_modules/lodash/fp/uniqueId.js | 5 +
.../node_modules/lodash/fp/unnest.js | 1 +
.../node_modules/lodash/fp/unset.js | 5 +
.../node_modules/lodash/fp/unzip.js | 5 +
.../node_modules/lodash/fp/unzipWith.js | 5 +
.../node_modules/lodash/fp/update.js | 5 +
.../node_modules/lodash/fp/updateWith.js | 5 +
.../node_modules/lodash/fp/upperCase.js | 5 +
.../node_modules/lodash/fp/upperFirst.js | 5 +
.../node_modules/lodash/fp/useWith.js | 1 +
.../node_modules/lodash/fp/util.js | 2 +
.../node_modules/lodash/fp/value.js | 5 +
.../node_modules/lodash/fp/valueOf.js | 5 +
.../node_modules/lodash/fp/values.js | 5 +
.../node_modules/lodash/fp/valuesIn.js | 5 +
.../node_modules/lodash/fp/where.js | 1 +
.../node_modules/lodash/fp/whereEq.js | 1 +
.../node_modules/lodash/fp/without.js | 5 +
.../node_modules/lodash/fp/words.js | 5 +
.../node_modules/lodash/fp/wrap.js | 5 +
.../node_modules/lodash/fp/wrapperAt.js | 5 +
.../node_modules/lodash/fp/wrapperChain.js | 5 +
.../node_modules/lodash/fp/wrapperLodash.js | 5 +
.../node_modules/lodash/fp/wrapperReverse.js | 5 +
.../node_modules/lodash/fp/wrapperValue.js | 5 +
.../node_modules/lodash/fp/xor.js | 5 +
.../node_modules/lodash/fp/xorBy.js | 5 +
.../node_modules/lodash/fp/xorWith.js | 5 +
.../node_modules/lodash/fp/zip.js | 5 +
.../node_modules/lodash/fp/zipAll.js | 5 +
.../node_modules/lodash/fp/zipObj.js | 1 +
.../node_modules/lodash/fp/zipObject.js | 5 +
.../node_modules/lodash/fp/zipObjectDeep.js | 5 +
.../node_modules/lodash/fp/zipWith.js | 5 +
.../node_modules/lodash/fromPairs.js | 28 +
.../node_modules/lodash/function.js | 25 +
.../node_modules/lodash/functions.js | 31 +
.../node_modules/lodash/functionsIn.js | 31 +
.../sequelize-cli/node_modules/lodash/get.js | 33 +
.../node_modules/lodash/groupBy.js | 41 +
.../sequelize-cli/node_modules/lodash/gt.js | 29 +
.../sequelize-cli/node_modules/lodash/gte.js | 30 +
.../sequelize-cli/node_modules/lodash/has.js | 35 +
.../node_modules/lodash/hasIn.js | 34 +
.../sequelize-cli/node_modules/lodash/head.js | 23 +
.../node_modules/lodash/identity.js | 21 +
.../node_modules/lodash/inRange.js | 55 +
.../node_modules/lodash/includes.js | 53 +
.../node_modules/lodash/index.js | 1 +
.../node_modules/lodash/indexOf.js | 42 +
.../node_modules/lodash/initial.js | 22 +
.../node_modules/lodash/intersection.js | 30 +
.../node_modules/lodash/intersectionBy.js | 45 +
.../node_modules/lodash/intersectionWith.js | 41 +
.../node_modules/lodash/invert.js | 27 +
.../node_modules/lodash/invertBy.js | 44 +
.../node_modules/lodash/invoke.js | 24 +
.../node_modules/lodash/invokeMap.js | 41 +
.../node_modules/lodash/isArguments.js | 36 +
.../node_modules/lodash/isArray.js | 26 +
.../node_modules/lodash/isArrayBuffer.js | 27 +
.../node_modules/lodash/isArrayLike.js | 33 +
.../node_modules/lodash/isArrayLikeObject.js | 33 +
.../node_modules/lodash/isBoolean.js | 29 +
.../node_modules/lodash/isBuffer.js | 38 +
.../node_modules/lodash/isDate.js | 27 +
.../node_modules/lodash/isElement.js | 25 +
.../node_modules/lodash/isEmpty.js | 77 +
.../node_modules/lodash/isEqual.js | 35 +
.../node_modules/lodash/isEqualWith.js | 41 +
.../node_modules/lodash/isError.js | 36 +
.../node_modules/lodash/isFinite.js | 36 +
.../node_modules/lodash/isFunction.js | 37 +
.../node_modules/lodash/isInteger.js | 33 +
.../node_modules/lodash/isLength.js | 35 +
.../node_modules/lodash/isMap.js | 27 +
.../node_modules/lodash/isMatch.js | 36 +
.../node_modules/lodash/isMatchWith.js | 41 +
.../node_modules/lodash/isNaN.js | 38 +
.../node_modules/lodash/isNative.js | 40 +
.../node_modules/lodash/isNil.js | 25 +
.../node_modules/lodash/isNull.js | 22 +
.../node_modules/lodash/isNumber.js | 38 +
.../node_modules/lodash/isObject.js | 31 +
.../node_modules/lodash/isObjectLike.js | 29 +
.../node_modules/lodash/isPlainObject.js | 62 +
.../node_modules/lodash/isRegExp.js | 27 +
.../node_modules/lodash/isSafeInteger.js | 37 +
.../node_modules/lodash/isSet.js | 27 +
.../node_modules/lodash/isString.js | 30 +
.../node_modules/lodash/isSymbol.js | 29 +
.../node_modules/lodash/isTypedArray.js | 27 +
.../node_modules/lodash/isUndefined.js | 22 +
.../node_modules/lodash/isWeakMap.js | 28 +
.../node_modules/lodash/isWeakSet.js | 28 +
.../node_modules/lodash/iteratee.js | 53 +
.../sequelize-cli/node_modules/lodash/join.js | 26 +
.../node_modules/lodash/kebabCase.js | 28 +
.../node_modules/lodash/keyBy.js | 36 +
.../sequelize-cli/node_modules/lodash/keys.js | 37 +
.../node_modules/lodash/keysIn.js | 32 +
.../sequelize-cli/node_modules/lodash/lang.js | 58 +
.../sequelize-cli/node_modules/lodash/last.js | 20 +
.../node_modules/lodash/lastIndexOf.js | 46 +
.../node_modules/lodash/lodash.js | 17084 ++
.../node_modules/lodash/lodash.min.js | 136 +
.../node_modules/lodash/lowerCase.js | 27 +
.../node_modules/lodash/lowerFirst.js | 22 +
.../sequelize-cli/node_modules/lodash/lt.js | 29 +
.../sequelize-cli/node_modules/lodash/lte.js | 30 +
.../sequelize-cli/node_modules/lodash/map.js | 53 +
.../node_modules/lodash/mapKeys.js | 36 +
.../node_modules/lodash/mapValues.js | 43 +
.../node_modules/lodash/matches.js | 39 +
.../node_modules/lodash/matchesProperty.js | 37 +
.../sequelize-cli/node_modules/lodash/math.js | 17 +
.../sequelize-cli/node_modules/lodash/max.js | 29 +
.../node_modules/lodash/maxBy.js | 34 +
.../sequelize-cli/node_modules/lodash/mean.js | 22 +
.../node_modules/lodash/meanBy.js | 31 +
.../node_modules/lodash/memoize.js | 73 +
.../node_modules/lodash/merge.js | 39 +
.../node_modules/lodash/mergeWith.js | 39 +
.../node_modules/lodash/method.js | 34 +
.../node_modules/lodash/methodOf.js | 33 +
.../sequelize-cli/node_modules/lodash/min.js | 29 +
.../node_modules/lodash/minBy.js | 34 +
.../node_modules/lodash/mixin.js | 74 +
.../node_modules/lodash/multiply.js | 22 +
.../node_modules/lodash/negate.js | 40 +
.../sequelize-cli/node_modules/lodash/next.js | 35 +
.../sequelize-cli/node_modules/lodash/noop.js | 17 +
.../sequelize-cli/node_modules/lodash/now.js | 23 +
.../sequelize-cli/node_modules/lodash/nth.js | 29 +
.../node_modules/lodash/nthArg.js | 32 +
.../node_modules/lodash/number.js | 5 +
.../node_modules/lodash/object.js | 49 +
.../sequelize-cli/node_modules/lodash/omit.js | 57 +
.../node_modules/lodash/omitBy.js | 29 +
.../sequelize-cli/node_modules/lodash/once.js | 25 +
.../node_modules/lodash/orderBy.js | 47 +
.../sequelize-cli/node_modules/lodash/over.js | 24 +
.../node_modules/lodash/overArgs.js | 61 +
.../node_modules/lodash/overEvery.js | 30 +
.../node_modules/lodash/overSome.js | 30 +
.../node_modules/lodash/package.json | 106 +
.../sequelize-cli/node_modules/lodash/pad.js | 49 +
.../node_modules/lodash/padEnd.js | 39 +
.../node_modules/lodash/padStart.js | 39 +
.../node_modules/lodash/parseInt.js | 43 +
.../node_modules/lodash/partial.js | 50 +
.../node_modules/lodash/partialRight.js | 49 +
.../node_modules/lodash/partition.js | 43 +
.../sequelize-cli/node_modules/lodash/pick.js | 25 +
.../node_modules/lodash/pickBy.js | 37 +
.../node_modules/lodash/plant.js | 48 +
.../node_modules/lodash/property.js | 32 +
.../node_modules/lodash/propertyOf.js | 30 +
.../sequelize-cli/node_modules/lodash/pull.js | 29 +
.../node_modules/lodash/pullAll.js | 29 +
.../node_modules/lodash/pullAllBy.js | 33 +
.../node_modules/lodash/pullAllWith.js | 32 +
.../node_modules/lodash/pullAt.js | 43 +
.../node_modules/lodash/random.js | 82 +
.../node_modules/lodash/range.js | 46 +
.../node_modules/lodash/rangeRight.js | 41 +
.../node_modules/lodash/rearg.js | 33 +
.../node_modules/lodash/reduce.js | 51 +
.../node_modules/lodash/reduceRight.js | 36 +
.../node_modules/lodash/reject.js | 46 +
.../node_modules/lodash/remove.js | 53 +
.../node_modules/lodash/repeat.js | 37 +
.../node_modules/lodash/replace.js | 29 +
.../sequelize-cli/node_modules/lodash/rest.js | 40 +
.../node_modules/lodash/result.js | 56 +
.../node_modules/lodash/reverse.js | 34 +
.../node_modules/lodash/round.js | 26 +
.../node_modules/lodash/sample.js | 24 +
.../node_modules/lodash/sampleSize.js | 37 +
.../sequelize-cli/node_modules/lodash/seq.js | 16 +
.../sequelize-cli/node_modules/lodash/set.js | 35 +
.../node_modules/lodash/setWith.js | 32 +
.../node_modules/lodash/shuffle.js | 25 +
.../sequelize-cli/node_modules/lodash/size.js | 46 +
.../node_modules/lodash/slice.js | 37 +
.../node_modules/lodash/snakeCase.js | 28 +
.../sequelize-cli/node_modules/lodash/some.js | 51 +
.../node_modules/lodash/sortBy.js | 48 +
.../node_modules/lodash/sortedIndex.js | 24 +
.../node_modules/lodash/sortedIndexBy.js | 33 +
.../node_modules/lodash/sortedIndexOf.js | 31 +
.../node_modules/lodash/sortedLastIndex.js | 25 +
.../node_modules/lodash/sortedLastIndexBy.js | 33 +
.../node_modules/lodash/sortedLastIndexOf.js | 31 +
.../node_modules/lodash/sortedUniq.js | 24 +
.../node_modules/lodash/sortedUniqBy.js | 26 +
.../node_modules/lodash/split.js | 52 +
.../node_modules/lodash/spread.js | 63 +
.../node_modules/lodash/startCase.js | 29 +
.../node_modules/lodash/startsWith.js | 39 +
.../node_modules/lodash/string.js | 33 +
.../node_modules/lodash/stubArray.js | 23 +
.../node_modules/lodash/stubFalse.js | 18 +
.../node_modules/lodash/stubObject.js | 23 +
.../node_modules/lodash/stubString.js | 18 +
.../node_modules/lodash/stubTrue.js | 18 +
.../node_modules/lodash/subtract.js | 22 +
.../sequelize-cli/node_modules/lodash/sum.js | 24 +
.../node_modules/lodash/sumBy.js | 33 +
.../sequelize-cli/node_modules/lodash/tail.js | 22 +
.../sequelize-cli/node_modules/lodash/take.js | 37 +
.../node_modules/lodash/takeRight.js | 39 +
.../node_modules/lodash/takeRightWhile.js | 45 +
.../node_modules/lodash/takeWhile.js | 45 +
.../sequelize-cli/node_modules/lodash/tap.js | 29 +
.../node_modules/lodash/template.js | 238 +
.../node_modules/lodash/templateSettings.js | 67 +
.../node_modules/lodash/throttle.js | 69 +
.../sequelize-cli/node_modules/lodash/thru.js | 28 +
.../node_modules/lodash/times.js | 51 +
.../node_modules/lodash/toArray.js | 58 +
.../node_modules/lodash/toFinite.js | 42 +
.../node_modules/lodash/toInteger.js | 36 +
.../node_modules/lodash/toIterator.js | 23 +
.../node_modules/lodash/toJSON.js | 1 +
.../node_modules/lodash/toLength.js | 38 +
.../node_modules/lodash/toLower.js | 28 +
.../node_modules/lodash/toNumber.js | 66 +
.../node_modules/lodash/toPairs.js | 30 +
.../node_modules/lodash/toPairsIn.js | 30 +
.../node_modules/lodash/toPath.js | 33 +
.../node_modules/lodash/toPlainObject.js | 32 +
.../node_modules/lodash/toSafeInteger.js | 37 +
.../node_modules/lodash/toString.js | 28 +
.../node_modules/lodash/toUpper.js | 28 +
.../node_modules/lodash/transform.js | 65 +
.../sequelize-cli/node_modules/lodash/trim.js | 49 +
.../node_modules/lodash/trimEnd.js | 43 +
.../node_modules/lodash/trimStart.js | 43 +
.../node_modules/lodash/truncate.js | 111 +
.../node_modules/lodash/unary.js | 22 +
.../node_modules/lodash/unescape.js | 34 +
.../node_modules/lodash/union.js | 26 +
.../node_modules/lodash/unionBy.js | 39 +
.../node_modules/lodash/unionWith.js | 34 +
.../sequelize-cli/node_modules/lodash/uniq.js | 25 +
.../node_modules/lodash/uniqBy.js | 31 +
.../node_modules/lodash/uniqWith.js | 28 +
.../node_modules/lodash/uniqueId.js | 28 +
.../node_modules/lodash/unset.js | 34 +
.../node_modules/lodash/unzip.js | 45 +
.../node_modules/lodash/unzipWith.js | 39 +
.../node_modules/lodash/update.js | 35 +
.../node_modules/lodash/updateWith.js | 33 +
.../node_modules/lodash/upperCase.js | 27 +
.../node_modules/lodash/upperFirst.js | 22 +
.../sequelize-cli/node_modules/lodash/util.js | 34 +
.../node_modules/lodash/value.js | 1 +
.../node_modules/lodash/valueOf.js | 1 +
.../node_modules/lodash/values.js | 34 +
.../node_modules/lodash/valuesIn.js | 32 +
.../node_modules/lodash/without.js | 31 +
.../node_modules/lodash/words.js | 35 +
.../sequelize-cli/node_modules/lodash/wrap.js | 30 +
.../node_modules/lodash/wrapperAt.js | 48 +
.../node_modules/lodash/wrapperChain.js | 34 +
.../node_modules/lodash/wrapperLodash.js | 147 +
.../node_modules/lodash/wrapperReverse.js | 44 +
.../node_modules/lodash/wrapperValue.js | 21 +
.../sequelize-cli/node_modules/lodash/xor.js | 28 +
.../node_modules/lodash/xorBy.js | 39 +
.../node_modules/lodash/xorWith.js | 34 +
.../sequelize-cli/node_modules/lodash/zip.js | 22 +
.../node_modules/lodash/zipObject.js | 24 +
.../node_modules/lodash/zipObjectDeep.js | 23 +
.../node_modules/lodash/zipWith.js | 32 +
.../node_modules/yargs/CHANGELOG.md | 921 +
.../sequelize-cli/node_modules/yargs/LICENSE | 22 +
.../node_modules/yargs/README.md | 2017 +
.../node_modules/yargs/completion.sh.hbs | 28 +
.../sequelize-cli/node_modules/yargs/index.js | 31 +
.../node_modules/yargs/lib/apply-extends.js | 41 +
.../node_modules/yargs/lib/argsert.js | 72 +
.../node_modules/yargs/lib/assign.js | 15 +
.../node_modules/yargs/lib/command.js | 334 +
.../node_modules/yargs/lib/completion.js | 104 +
.../node_modules/yargs/lib/levenshtein.js | 47 +
.../node_modules/yargs/lib/obj-filter.js | 10 +
.../node_modules/yargs/lib/usage.js | 489 +
.../node_modules/yargs/lib/validation.js | 363 +
.../node_modules/yargs/lib/yerror.js | 10 +
.../node_modules/yargs/locales/be.json | 39 +
.../node_modules/yargs/locales/de.json | 39 +
.../node_modules/yargs/locales/en.json | 40 +
.../node_modules/yargs/locales/es.json | 39 +
.../node_modules/yargs/locales/fr.json | 37 +
.../node_modules/yargs/locales/hi.json | 39 +
.../node_modules/yargs/locales/hu.json | 39 +
.../node_modules/yargs/locales/id.json | 40 +
.../node_modules/yargs/locales/it.json | 39 +
.../node_modules/yargs/locales/ja.json | 39 +
.../node_modules/yargs/locales/ko.json | 39 +
.../node_modules/yargs/locales/nb.json | 37 +
.../node_modules/yargs/locales/nl.json | 39 +
.../node_modules/yargs/locales/pirate.json | 12 +
.../node_modules/yargs/locales/pl.json | 39 +
.../node_modules/yargs/locales/pt.json | 38 +
.../node_modules/yargs/locales/pt_BR.json | 40 +
.../node_modules/yargs/locales/ru.json | 39 +
.../node_modules/yargs/locales/th.json | 39 +
.../node_modules/yargs/locales/tr.json | 39 +
.../node_modules/yargs/locales/zh_CN.json | 37 +
.../node_modules/yargs/locales/zh_TW.json | 40 +
.../node_modules/yargs/package.json | 155 +
.../sequelize-cli/node_modules/yargs/yargs.js | 1126 +
node_modules/sequelize-cli/package.json | 144 +
node_modules/sequelize-cli/test/.jshintrc | 14 +
.../test/db/migrate-json.test.js | 123 +
.../sequelize-cli/test/db/migrate.test.js | 254 +
.../test/db/migrate/old_schema.test.js | 204 +
.../test/db/migrate/status.test.js | 26 +
.../test/db/migrate/undo.test.js | 99 +
.../test/db/migrate/undo/all.test.js | 69 +
.../sequelize-cli/test/db/seed-json.test.js | 97 +
.../sequelize-cli/test/db/seed.test.js | 116 +
.../sequelize-cli/test/db/seed/all.test.js | 109 +
.../sequelize-cli/test/db/seed/undo.test.js | 61 +
.../test/db/seed/undo/all.test.js | 91 +
.../test/environment-variable.test.js | 34 +
node_modules/sequelize-cli/test/help.test.js | 21 +
node_modules/sequelize-cli/test/init.test.js | 121 +
.../test/migration/create.test.js | 68 +
.../sequelize-cli/test/model/create.test.js | 243 +
.../sequelize-cli/test/options.test.js | 50 +
.../sequelize-cli/test/seed/create.test.js | 68 +
.../20111117063700-createPerson.coffee | 13 +
.../migrations/20111117063700-createPerson.js | 21 +
.../20111130161100-emptyMigration.js | 10 +
.../20111205064000-renamePersonToUser.js | 13 +
...20111205162700-addSignatureColumnToUser.js | 50 +
...0111205167000-addUniqueNameColumnToUser.js | 25 +
...111206061400-removeShopIdColumnFromUser.js | 16 +
...-changeSignatureColumnOfUserToMendatory.js | 17 +
...163300-renameSignatureColumnOfUserToSig.js | 13 +
...0130909174103-createFunctionGetAnAnswer.js | 12 +
...3-renameFunctionGetAnAnswerGetTheAnswer.js | 12 +
...130909175000-deleteFunctionGetTheAnswer.js | 12 +
...0130909175939-createTestTableForTrigger.js | 23 +
...9180846-createTriggerOnTriggerTestTable.js | 22 +
...renameTriggerUpdatedAtToUpdateUpdatedAt.js | 12 +
...0909185621-deleteTriggerUpdateUpdatedAt.js | 23 +
.../20141208213500-createPerson.coffee | 10 +
.../invalid/20141208213500-createPerson.js | 13 +
.../new/20141208213500-createPerson.coffee | 11 +
.../new/20141208213500-createPerson.js | 17 +
.../test/support/assets/project.js | 7 +
.../seeders/20111117063700-seedPerson.coffee | 12 +
.../seeders/20111117063700-seedPerson.js | 18 +
.../seeders/20111117063900-seedPerson2.js | 19 +
.../new/20141208213500-seedPerson.coffee | 11 +
.../new/20141208213500-seedPerson.coffee~ | 11 +
.../seeders/new/20141208213500-seedPerson.js | 16 +
.../test/support/config/config.js | 56 +
.../test/support/config/options.js | 8 +
.../sequelize-cli/test/support/helpers.js | 203 +
.../sequelize-cli/test/support/index.js | 235 +
node_modules/sequelize-cli/test/url.test.js | 63 +
.../sequelize-cli/test/version.test.js | 28 +
.../sequelize-cli/var/vagrant/README.md | 14 +
.../sequelize-cli/var/vagrant/Vagrantfile | 27 +
.../sequelize-cli/var/vagrant/provision.sh | 24 +
node_modules/sequelize/.dockerignore | 13 +
node_modules/sequelize/.editorconfig | 24 +
.../sequelize/.github/ISSUE_TEMPLATE.md | 28 +
.../.github/PULL_REQUEST_TEMPLATE.md | 19 +
node_modules/sequelize/.gitmodules | 0
.../sequelize/.idea/dictionaries/jan.xml | 11 +
node_modules/sequelize/.idea/encodings.xml | 6 +
.../inspectionProfiles/Project_Default.xml | 7 +
.../inspectionProfiles/profiles_settings.xml | 7 +
.../sequelize/.idea/jsLibraryMappings.xml | 8 +
.../sequelize/.idea/jsLinters/jshint.xml | 83 +
node_modules/sequelize/.idea/misc.xml | 6 +
node_modules/sequelize/.idea/modules.xml | 8 +
node_modules/sequelize/.idea/sequelize.iml | 11 +
node_modules/sequelize/.idea/vcs.xml | 6 +
node_modules/sequelize/.idea/watcherTasks.xml | 4 +
node_modules/sequelize/.idea/workspace.xml | 1072 +
node_modules/sequelize/.jshintrc | 48 +
node_modules/sequelize/.npmignore | 9 +
node_modules/sequelize/.travis.yml | 43 +
node_modules/sequelize/CONTRIBUTING.DOCS.md | 26 +
node_modules/sequelize/CONTRIBUTING.md | 196 +
node_modules/sequelize/Dockerfile | 9 +
node_modules/sequelize/LICENSE | 4 +
node_modules/sequelize/README.md | 45 +
node_modules/sequelize/appveyor-setup.ps1 | 42 +
node_modules/sequelize/appveyor.yml | 47 +
node_modules/sequelize/changelog.md | 1147 +
node_modules/sequelize/codecov.yml | 4 +
node_modules/sequelize/docker-compose.yml | 27 +
node_modules/sequelize/index.js | 7 +
.../sequelize/lib/associations/base.js | 28 +
.../lib/associations/belongs-to-many.js | 790 +
.../sequelize/lib/associations/belongs-to.js | 261 +
.../sequelize/lib/associations/has-many.js | 552 +
.../sequelize/lib/associations/has-one.js | 276 +
.../sequelize/lib/associations/helpers.js | 49 +
.../sequelize/lib/associations/index.js | 9 +
.../sequelize/lib/associations/mixin.js | 287 +
node_modules/sequelize/lib/data-types.js | 993 +
node_modules/sequelize/lib/deferrable.js | 155 +
.../dialects/abstract/connection-manager.js | 261 +
.../sequelize/lib/dialects/abstract/index.js | 64 +
.../lib/dialects/abstract/query-generator.js | 2477 +
.../sequelize/lib/dialects/abstract/query.js | 708 +
.../sequelize/lib/dialects/mariadb/index.js | 13 +
.../lib/dialects/mssql/connection-manager.js | 147 +
.../lib/dialects/mssql/data-types.js | 204 +
.../sequelize/lib/dialects/mssql/index.js | 61 +
.../lib/dialects/mssql/query-generator.js | 877 +
.../lib/dialects/mssql/query-interface.js | 67 +
.../sequelize/lib/dialects/mssql/query.js | 339 +
.../lib/dialects/mssql/resource-lock.js | 25 +
.../lib/dialects/mysql/connection-manager.js | 145 +
.../lib/dialects/mysql/data-types.js | 124 +
.../sequelize/lib/dialects/mysql/index.js | 50 +
.../lib/dialects/mysql/query-generator.js | 385 +
.../lib/dialects/mysql/query-interface.js | 51 +
.../sequelize/lib/dialects/mysql/query.js | 209 +
.../sequelize/lib/dialects/parserStore.js | 20 +
.../dialects/postgres/connection-manager.js | 189 +
.../lib/dialects/postgres/data-types.js | 432 +
.../sequelize/lib/dialects/postgres/hstore.js | 18 +
.../sequelize/lib/dialects/postgres/index.js | 60 +
.../lib/dialects/postgres/query-generator.js | 902 +
.../sequelize/lib/dialects/postgres/query.js | 369 +
.../sequelize/lib/dialects/postgres/range.js | 81 +
.../lib/dialects/sqlite/connection-manager.js | 87 +
.../lib/dialects/sqlite/data-types.js | 193 +
.../sequelize/lib/dialects/sqlite/index.js | 44 +
.../lib/dialects/sqlite/query-generator.js | 398 +
.../lib/dialects/sqlite/query-interface.js | 113 +
.../sequelize/lib/dialects/sqlite/query.js | 385 +
node_modules/sequelize/lib/errors.js | 316 +
node_modules/sequelize/lib/hooks.js | 501 +
.../sequelize/lib/instance-validator.js | 360 +
node_modules/sequelize/lib/instance.js | 1098 +
node_modules/sequelize/lib/model-manager.js | 103 +
node_modules/sequelize/lib/model.js | 2706 +
node_modules/sequelize/lib/model/attribute.js | 10 +
.../sequelize/lib/plugins/counter-cache.js | 177 +
node_modules/sequelize/lib/promise.js | 55 +
node_modules/sequelize/lib/query-interface.js | 940 +
node_modules/sequelize/lib/query-types.js | 17 +
node_modules/sequelize/lib/sequelize.js | 1409 +
node_modules/sequelize/lib/sql-string.js | 102 +
node_modules/sequelize/lib/transaction.js | 313 +
node_modules/sequelize/lib/utils.js | 478 +
.../lib/utils/parameter-validator.js | 57 +
.../sequelize/lib/utils/validator-extras.js | 90 +
node_modules/sequelize/mkdocs.yml | 45 +
.../sequelize/node_modules/.bin/semver | 1 +
.../node_modules/generic-pool/.eslintrc.js | 6 +
.../node_modules/generic-pool/.npmignore | 4 +
.../node_modules/generic-pool/.travis.yml | 21 +
.../node_modules/generic-pool/CHANGELOG.md | 124 +
.../node_modules/generic-pool/Makefile | 31 +
.../node_modules/generic-pool/README.md | 298 +
.../node_modules/generic-pool/bugs/128.js | 112 +
.../node_modules/generic-pool/fabfile.py | 27 +
.../generic-pool/lib/generic-pool.js | 565 +
.../node_modules/generic-pool/package.json | 146 +
.../generic-pool/test/generic-pool.test.js | 751 +
.../sequelize/node_modules/semver/LICENSE | 15 +
.../sequelize/node_modules/semver/README.md | 350 +
.../sequelize/node_modules/semver/bin/semver | 133 +
.../node_modules/semver/package.json | 94 +
.../sequelize/node_modules/semver/range.bnf | 16 +
.../sequelize/node_modules/semver/semver.js | 1203 +
node_modules/sequelize/package.json | 211 +
node_modules/sequelize/sscce_template.js | 8 +
node_modules/sequelize/test-app.js | 47 +
node_modules/sequencify/.npmignore | 9 +
node_modules/sequencify/.travis.yml | 6 +
node_modules/sequencify/LICENSE | 20 +
node_modules/sequencify/README.md | 68 +
node_modules/sequencify/index.js | 46 +
node_modules/sequencify/package.json | 96 +
node_modules/serve-favicon/HISTORY.md | 123 +
node_modules/serve-favicon/LICENSE | 25 +
node_modules/serve-favicon/README.md | 136 +
node_modules/serve-favicon/index.js | 177 +
node_modules/serve-favicon/package.json | 107 +
node_modules/serve-static/HISTORY.md | 340 +
node_modules/serve-static/LICENSE | 25 +
node_modules/serve-static/README.md | 249 +
node_modules/serve-static/index.js | 188 +
node_modules/serve-static/package.json | 107 +
node_modules/set-blocking/CHANGELOG.md | 26 +
node_modules/set-blocking/LICENSE.txt | 14 +
node_modules/set-blocking/README.md | 31 +
node_modules/set-blocking/index.js | 7 +
node_modules/set-blocking/package.json | 106 +
node_modules/setprototypeof/LICENSE | 13 +
node_modules/setprototypeof/README.md | 21 +
node_modules/setprototypeof/index.js | 13 +
node_modules/setprototypeof/package.json | 88 +
node_modules/shebang-command/index.js | 19 +
node_modules/shebang-command/license | 21 +
node_modules/shebang-command/package.json | 106 +
node_modules/shebang-command/readme.md | 39 +
node_modules/shebang-regex/index.js | 2 +
node_modules/shebang-regex/license | 21 +
node_modules/shebang-regex/package.json | 96 +
node_modules/shebang-regex/readme.md | 29 +
node_modules/shimmer/.npmignore | 2 +
node_modules/shimmer/.travis.yml | 10 +
node_modules/shimmer/README.md | 74 +
node_modules/shimmer/index.js | 88 +
node_modules/shimmer/package.json | 92 +
node_modules/shimmer/test/init.tap.js | 48 +
node_modules/shimmer/test/massWrap.tap.js | 174 +
node_modules/shimmer/test/unwrap.tap.js | 101 +
node_modules/shimmer/test/wrap.tap.js | 128 +
node_modules/sigmund/LICENSE | 15 +
node_modules/sigmund/README.md | 53 +
node_modules/sigmund/bench.js | 283 +
node_modules/sigmund/package.json | 94 +
node_modules/sigmund/sigmund.js | 39 +
node_modules/sigmund/test/basic.js | 24 +
node_modules/source-map/README.md | 510 +
node_modules/source-map/build/assert-shim.js | 56 +
node_modules/source-map/build/mini-require.js | 152 +
.../source-map/build/prefix-source-map.jsm | 21 +
.../source-map/build/prefix-utils.jsm | 18 +
.../source-map/build/suffix-browser.js | 8 +
.../source-map/build/suffix-source-map.jsm | 6 +
.../source-map/build/suffix-utils.jsm | 21 +
node_modules/source-map/build/test-prefix.js | 8 +
node_modules/source-map/build/test-suffix.js | 3 +
node_modules/source-map/lib/source-map.js | 8 +
.../source-map/lib/source-map/array-set.js | 107 +
.../source-map/lib/source-map/base64-vlq.js | 146 +
.../source-map/lib/source-map/base64.js | 73 +
.../lib/source-map/binary-search.js | 117 +
.../source-map/lib/source-map/mapping-list.js | 86 +
.../source-map/lib/source-map/quick-sort.js | 120 +
.../lib/source-map/source-map-consumer.js | 1077 +
.../lib/source-map/source-map-generator.js | 399 +
.../source-map/lib/source-map/source-node.js | 414 +
.../source-map/lib/source-map/util.js | 370 +
node_modules/source-map/package.json | 234 +
node_modules/sparkles/LICENSE | 22 +
node_modules/sparkles/README.md | 41 +
node_modules/sparkles/index.js | 45 +
node_modules/sparkles/package.json | 104 +
node_modules/spdx-correct/LICENSE | 57 +
node_modules/spdx-correct/README.md | 10 +
node_modules/spdx-correct/index.js | 237 +
node_modules/spdx-correct/package.json | 98 +
node_modules/spdx-expression-parse/AUTHORS | 3 +
node_modules/spdx-expression-parse/LICENSE | 22 +
node_modules/spdx-expression-parse/README.md | 83 +
node_modules/spdx-expression-parse/index.js | 5 +
.../spdx-expression-parse/package.json | 125 +
node_modules/spdx-expression-parse/parser.js | 1357 +
node_modules/spdx-license-ids/LICENSE | 24 +
node_modules/spdx-license-ids/README.md | 55 +
node_modules/spdx-license-ids/package.json | 116 +
.../spdx-license-ids/spdx-license-ids.json | 334 +
node_modules/split/.npmignore | 3 +
node_modules/split/.travis.yml | 3 +
node_modules/split/LICENCE | 22 +
node_modules/split/examples/pretty.js | 26 +
node_modules/split/index.js | 63 +
node_modules/split/package.json | 91 +
node_modules/split/readme.markdown | 72 +
node_modules/split/test/options.asynct.js | 46 +
.../split/test/partitioned_unicode.js | 34 +
node_modules/split/test/split.asynct.js | 137 +
node_modules/split/test/try_catch.asynct.js | 51 +
node_modules/statuses/HISTORY.md | 55 +
node_modules/statuses/LICENSE | 23 +
node_modules/statuses/README.md | 103 +
node_modules/statuses/codes.json | 65 +
node_modules/statuses/index.js | 110 +
node_modules/statuses/package.json | 140 +
node_modules/stream-consume/.npmignore | 1 +
node_modules/stream-consume/README.md | 53 +
node_modules/stream-consume/index.js | 14 +
node_modules/stream-consume/package.json | 82 +
node_modules/stream-consume/test/tests.js | 180 +
node_modules/string-width/index.js | 37 +
node_modules/string-width/license | 21 +
node_modules/string-width/package.json | 125 +
node_modules/string-width/readme.md | 42 +
node_modules/string_decoder/.npmignore | 2 +
node_modules/string_decoder/LICENSE | 20 +
node_modules/string_decoder/README.md | 7 +
node_modules/string_decoder/index.js | 221 +
node_modules/string_decoder/package.json | 89 +
node_modules/strip-ansi/index.js | 6 +
node_modules/strip-ansi/license | 21 +
node_modules/strip-ansi/package.json | 126 +
node_modules/strip-ansi/readme.md | 33 +
node_modules/strip-bom/cli.js | 42 +
node_modules/strip-bom/index.js | 24 +
node_modules/strip-bom/package.json | 113 +
node_modules/strip-bom/readme.md | 59 +
node_modules/supports-color/index.js | 50 +
node_modules/supports-color/license | 21 +
node_modules/supports-color/package.json | 113 +
node_modules/supports-color/readme.md | 36 +
.../terraformer-wkt-parser/.npmignore | 1 +
.../terraformer-wkt-parser/.travis.yml | 8 +
node_modules/terraformer-wkt-parser/AUTHORS | 2 +
.../terraformer-wkt-parser/CHANGELOG.md | 38 +
.../terraformer-wkt-parser/Gruntfile.js | 135 +
node_modules/terraformer-wkt-parser/LICENSE | 7 +
node_modules/terraformer-wkt-parser/README.md | 68 +
.../terraformer-wkt-parser/bower.json | 8 +
.../coverage/__root__/index.html | 93 +
.../__root__/terraformer-wkt-parser.js.html | 2348 +
.../terraformer-wkt-parser/coverage/base.css | 213 +
.../coverage/coverage.json | 1 +
.../coverage/dist/index.html | 93 +
.../dist/terraformer-wkt-parser.js.html | 2348 +
.../coverage/index.html | 93 +
.../coverage/prettify.css | 1 +
.../coverage/prettify.js | 1 +
.../coverage/sort-arrow-sprite.png | Bin 0 -> 209 bytes
.../terraformer-wkt-parser/coverage/sorter.js | 158 +
.../dist/terraformer-wkt-parser.js | 761 +
.../dist/terraformer-wkt-parser.min.js | 4 +
.../examples/feature_collection.json | 48 +
.../examples/linestring.json | 7 +
.../examples/linestring.wkt | 1 +
.../examples/multi_linestring.json | 13 +
.../examples/multi_linestring.wkt | 2 +
.../examples/multi_polygon.json | 30 +
.../examples/multi_polygon.wkt | 2 +
.../examples/multi_polygon_with_hole.wkt | 3 +
.../examples/multipoint.json | 7 +
.../examples/multipoint.wkt | 1 +
.../examples/multipoint_alternate.wkt | 1 +
.../examples/point.json | 4 +
.../terraformer-wkt-parser/examples/point.wkt | 1 +
.../examples/polygon.json | 12 +
.../examples/polygon.wkt | 1 +
.../examples/polygon_with_dots.wkt | 1 +
.../examples/polygon_with_hole.json | 19 +
.../examples/polygon_with_hole.wkt | 2 +
.../terraformer-wkt-parser/package.json | 119 +
.../terraformer-wkt-parser/spec/wktSpec.js | 718 +
.../src/module-source.js | 320 +
.../terraformer-wkt-parser/src/wkt.yy | 178 +
.../terraformer-wkt-parser.d.ts | 8 +
.../terraformer-wkt-parser.js | 761 +
.../terraformer-wkt-parser.min.js | 4 +
node_modules/terraformer-wkt-parser/test.js | 10 +
node_modules/terraformer-wkt-parser/test.ts | 12 +
.../test/convert-test.js | 121 +
.../test/terraformer-parse-test.js | 93 +
.../test/wkt-parse-test.js | 290 +
.../terraformer-wkt-parser/tsconfig.json | 11 +
.../terraformer-wkt-parser/typings.json | 8 +
.../typings/globals/geojson/index.d.ts | 129 +
.../typings/globals/geojson/typings.json | 8 +
.../terraformer-wkt-parser/typings/index.d.ts | 1 +
.../terraformer/.coverage/__root__/index.html | 93 +
.../.coverage/__root__/terraformer.js.html | 4319 +
node_modules/terraformer/.coverage/base.css | 213 +
.../terraformer/.coverage/coverage.json | 1 +
node_modules/terraformer/.coverage/index.html | 93 +
.../terraformer/.coverage/prettify.css | 1 +
.../terraformer/.coverage/prettify.js | 1 +
.../.coverage/sort-arrow-sprite.png | Bin 0 -> 209 bytes
node_modules/terraformer/.coverage/sorter.js | 158 +
node_modules/terraformer/.npmignore | 14 +
node_modules/terraformer/.travis.yml | 9 +
node_modules/terraformer/CHANGELOG.md | 78 +
node_modules/terraformer/Gemfile | 7 +
node_modules/terraformer/Gemfile.lock | 101 +
node_modules/terraformer/LICENSE | 7 +
node_modules/terraformer/README.md | 125 +
node_modules/terraformer/bower.json | 13 +
node_modules/terraformer/docs-build/CNAME | 1 +
.../docs-build/arcgis-parser/index.html | 197 +
.../assets/css/terraformer-02847305.css | 1 +
.../assets/fonts/esri-logo-3a94862e.svg | 283 +
.../assets/fonts/esri-logo-71163913.ttf | Bin 0 -> 7860 bytes
.../assets/fonts/esri-logo-80bed756.woff | Bin 0 -> 14468 bytes
.../assets/fonts/esri-logo-fc93d7bf.eot | Bin 0 -> 8026 bytes
.../assets/fonts/esri-logo.dev-aed9f839.svg | 283 +
.../images/terraformer-arcparser-a0228324.png | Bin 0 -> 39315 bytes
.../images/terraformer-core-93b83c36.png | Bin 0 -> 44547 bytes
.../images/terraformer-geostore-9e09ce2c.png | Bin 0 -> 50945 bytes
.../images/terraformer-parser-a57c9c2d.png | Bin 0 -> 24986 bytes
.../images/terraformer-wktparser-b18bc9d9.png | Bin 0 -> 38482 bytes
.../assets/javascripts/all-da39a3ee.js | 0
.../assets/javascripts/classie-b6db1f70.js | 1 +
.../assets/javascripts/drawer-3a1490eb.js | 1 +
.../javascripts/modernizr.custom-cadc78a2.js | 1 +
.../terraformer/docs-build/core/index.html | 795 +
.../terraformer/docs-build/favicon.ico | Bin 0 -> 6518 bytes
.../geostore/alternate-indexes/index.html | 210 +
.../geostore/core-concepts/index.html | 97 +
.../geostore/data-stores/index.html | 251 +
.../docs-build/geostore/index.html | 409 +
.../geostore/spatial-indexes/index.html | 250 +
.../docs-build/getting-started/index.html | 177 +
.../docs-build/glossary/index.html | 449 +
.../terraformer/docs-build/index.html | 172 +
.../terraformer/docs-build/install/index.html | 155 +
.../docs-build/partials/cover/index.html | 10 +
.../docs-build/partials/doctoc/index.html | 23 +
.../docs-build/partials/footer/index.html | 5 +
.../index_partials/arcgis_parser/index.html | 25 +
.../index_partials/geostore/index.html | 20 +
.../terraformer_core/index.html | 18 +
.../index_partials/wkt_parser/index.html | 22 +
.../docs-build/partials/nav/index.html | 16 +
.../docs-build/partials/subnav/index.html | 30 +
.../docs-build/wkt-parser/index.html | 147 +
node_modules/terraformer/gruntfile.js | 161 +
node_modules/terraformer/package.json | 121 +
node_modules/terraformer/release.sh | 37 +
.../terraformer/spec/geojsonHelpers.js | 392 +
.../terraformer/spec/spatialReferenceSpec.js | 537 +
.../terraformer/spec/terraformerSpec.js | 1145 +
.../terraformer/terraformer-1.0.8.min.js | 4 +
node_modules/terraformer/terraformer.d.ts | 324 +
node_modules/terraformer/terraformer.js | 1418 +
node_modules/terraformer/test.js | 95 +
node_modules/terraformer/test.ts | 121 +
node_modules/terraformer/tsconfig.json | 12 +
node_modules/terraformer/tslint.json | 17 +
node_modules/through/.travis.yml | 5 +
node_modules/through/LICENSE.APACHE2 | 15 +
node_modules/through/LICENSE.MIT | 24 +
node_modules/through/index.js | 108 +
node_modules/through/package.json | 100 +
node_modules/through/readme.markdown | 64 +
node_modules/through/test/async.js | 28 +
node_modules/through/test/auto-destroy.js | 30 +
node_modules/through/test/buffering.js | 71 +
node_modules/through/test/end.js | 45 +
node_modules/through/test/index.js | 133 +
node_modules/through2/.npmignore | 3 +
node_modules/through2/LICENSE.html | 336 +
node_modules/through2/LICENSE.md | 9 +
node_modules/through2/README.md | 136 +
.../node_modules/readable-stream/.npmignore | 9 +
.../node_modules/readable-stream/.travis.yml | 49 +
.../readable-stream/CONTRIBUTING.md | 38 +
.../readable-stream/GOVERNANCE.md | 136 +
.../node_modules/readable-stream/LICENSE | 47 +
.../node_modules/readable-stream/README.md | 57 +
.../doc/wg-meetings/2015-01-30.md | 60 +
.../readable-stream/duplex-browser.js | 1 +
.../node_modules/readable-stream/duplex.js | 1 +
.../readable-stream/lib/_stream_duplex.js | 75 +
.../lib/_stream_passthrough.js | 26 +
.../readable-stream/lib/_stream_readable.js | 935 +
.../readable-stream/lib/_stream_transform.js | 182 +
.../readable-stream/lib/_stream_writable.js | 544 +
.../lib/internal/streams/BufferList.js | 64 +
.../lib/internal/streams/stream-browser.js | 1 +
.../lib/internal/streams/stream.js | 1 +
.../node_modules/readable-stream/package.json | 134 +
.../readable-stream/passthrough.js | 1 +
.../readable-stream/readable-browser.js | 7 +
.../node_modules/readable-stream/readable.js | 19 +
.../node_modules/readable-stream/transform.js | 1 +
.../readable-stream/writable-browser.js | 1 +
.../node_modules/readable-stream/writable.js | 8 +
.../node_modules/string_decoder/.npmignore | 2 +
.../node_modules/string_decoder/LICENSE | 48 +
.../node_modules/string_decoder/README.md | 30 +
.../string_decoder/lib/string_decoder.js | 273 +
.../node_modules/string_decoder/package.json | 95 +
node_modules/through2/package.json | 111 +
node_modules/through2/through2.js | 96 +
node_modules/tildify/index.js | 9 +
node_modules/tildify/license | 21 +
node_modules/tildify/package.json | 108 +
node_modules/tildify/readme.md | 30 +
node_modules/time-stamp/LICENSE | 21 +
node_modules/time-stamp/README.md | 121 +
node_modules/time-stamp/index.js | 47 +
node_modules/time-stamp/package.json | 136 +
node_modules/timers-ext/.lint | 17 +
node_modules/timers-ext/.npmignore | 4 +
node_modules/timers-ext/.travis.yml | 12 +
node_modules/timers-ext/CHANGES | 21 +
node_modules/timers-ext/LICENSE | 21 +
node_modules/timers-ext/README.md | 55 +
node_modules/timers-ext/delay.js | 19 +
node_modules/timers-ext/max-timeout.js | 3 +
node_modules/timers-ext/once.js | 41 +
node_modules/timers-ext/package.json | 102 +
node_modules/timers-ext/test/delay.js | 23 +
node_modules/timers-ext/test/max-timeout.js | 11 +
node_modules/timers-ext/test/once.js | 38 +
node_modules/timers-ext/test/throttle.js | 33 +
node_modules/timers-ext/test/valid-timeout.js | 8 +
node_modules/timers-ext/throttle.js | 33 +
node_modules/timers-ext/valid-timeout.js | 10 +
node_modules/toposort-class/.eslintrc | 35 +
node_modules/toposort-class/.gitattributes | 1 +
node_modules/toposort-class/.npmignore | 44 +
node_modules/toposort-class/LICENSE | 21 +
node_modules/toposort-class/README.md | 93 +
.../benchmark/0.3.1/toposort.js | 128 +
.../toposort-class/benchmark/README.md | 11 +
.../toposort-class/benchmark/general.js | 56 +
.../toposort-class/benchmark/results.csv | 4 +
node_modules/toposort-class/build/toposort.js | 281 +
.../toposort-class/build/toposort.min.js | 1 +
node_modules/toposort-class/index.js | 1 +
node_modules/toposort-class/package.json | 102 +
node_modules/transformers/.npmignore | 2 +
node_modules/transformers/README.md | 141 +
node_modules/transformers/history.md | 77 +
node_modules/transformers/lib/shared.js | 162 +
node_modules/transformers/lib/transformers.js | 604 +
.../transformers/node_modules/.bin/uglifyjs | 1 +
.../node_modules/is-promise/.npmignore | 6 +
.../node_modules/is-promise/.travis.yml | 3 +
.../node_modules/is-promise/LICENSE | 19 +
.../node_modules/is-promise/index.js | 5 +
.../node_modules/is-promise/package.json | 80 +
.../node_modules/is-promise/readme.md | 29 +
.../node_modules/promise/.npmignore | 6 +
.../node_modules/promise/Readme.md | 85 +
.../node_modules/promise/index.js | 164 +
.../node_modules/promise/package.json | 83 +
.../node_modules/source-map/.npmignore | 2 +
.../node_modules/source-map/.travis.yml | 4 +
.../node_modules/source-map/CHANGELOG.md | 194 +
.../node_modules/source-map/LICENSE | 28 +
.../source-map/Makefile.dryice.js | 166 +
.../node_modules/source-map/README.md | 475 +
.../source-map/build/assert-shim.js | 56 +
.../source-map/build/mini-require.js | 152 +
.../source-map/build/prefix-source-map.jsm | 20 +
.../source-map/build/prefix-utils.jsm | 18 +
.../source-map/build/suffix-browser.js | 8 +
.../source-map/build/suffix-source-map.jsm | 6 +
.../source-map/build/suffix-utils.jsm | 21 +
.../source-map/build/test-prefix.js | 8 +
.../source-map/build/test-suffix.js | 3 +
.../node_modules/source-map/lib/source-map.js | 8 +
.../source-map/lib/source-map/array-set.js | 97 +
.../source-map/lib/source-map/base64-vlq.js | 142 +
.../source-map/lib/source-map/base64.js | 42 +
.../lib/source-map/binary-search.js | 80 +
.../source-map/lib/source-map/mapping-list.js | 86 +
.../lib/source-map/source-map-consumer.js | 575 +
.../lib/source-map/source-map-generator.js | 400 +
.../source-map/lib/source-map/source-node.js | 414 +
.../source-map/lib/source-map/util.js | 319 +
.../node_modules/source-map/package.json | 219 +
.../node_modules/source-map/test/run-tests.js | 62 +
.../source-map/test/source-map/test-api.js | 26 +
.../test/source-map/test-array-set.js | 104 +
.../test/source-map/test-base64-vlq.js | 23 +
.../source-map/test/source-map/test-base64.js | 35 +
.../test/source-map/test-binary-search.js | 54 +
.../test/source-map/test-dog-fooding.js | 84 +
.../source-map/test-source-map-consumer.js | 702 +
.../source-map/test-source-map-generator.js | 679 +
.../test/source-map/test-source-node.js | 612 +
.../source-map/test/source-map/test-util.js | 216 +
.../source-map/test/source-map/util.js | 192 +
.../node_modules/uglify-js/.npmignore | 2 +
.../node_modules/uglify-js/README.md | 544 +
.../node_modules/uglify-js/bin/uglifyjs | 370 +
.../node_modules/uglify-js/lib/ast.js | 964 +
.../node_modules/uglify-js/lib/compress.js | 1968 +
.../node_modules/uglify-js/lib/mozilla-ast.js | 265 +
.../node_modules/uglify-js/lib/output.js | 1220 +
.../node_modules/uglify-js/lib/parse.js | 1407 +
.../node_modules/uglify-js/lib/scope.js | 580 +
.../node_modules/uglify-js/lib/sourcemap.js | 81 +
.../node_modules/uglify-js/lib/transform.js | 218 +
.../node_modules/uglify-js/lib/utils.js | 288 +
.../node_modules/uglify-js/package.json | 96 +
.../uglify-js/test/compress/arrays.js | 12 +
.../uglify-js/test/compress/blocks.js | 49 +
.../uglify-js/test/compress/conditionals.js | 143 +
.../uglify-js/test/compress/dead-code.js | 89 +
.../uglify-js/test/compress/debugger.js | 24 +
.../uglify-js/test/compress/drop-unused.js | 97 +
.../uglify-js/test/compress/issue-105.js | 17 +
.../uglify-js/test/compress/issue-12.js | 11 +
.../uglify-js/test/compress/issue-22.js | 17 +
.../uglify-js/test/compress/issue-44.js | 31 +
.../uglify-js/test/compress/issue-59.js | 30 +
.../uglify-js/test/compress/labels.js | 163 +
.../uglify-js/test/compress/loops.js | 123 +
.../uglify-js/test/compress/properties.js | 25 +
.../uglify-js/test/compress/sequences.js | 161 +
.../uglify-js/test/compress/switch.js | 210 +
.../node_modules/uglify-js/test/run-tests.js | 170 +
.../node_modules/uglify-js/tools/node.js | 164 +
node_modules/transformers/package.json | 131 +
node_modules/type-is/HISTORY.md | 218 +
node_modules/type-is/LICENSE | 23 +
node_modules/type-is/README.md | 146 +
node_modules/type-is/index.js | 262 +
node_modules/type-is/package.json | 122 +
node_modules/uglify-js/LICENSE | 29 +
node_modules/uglify-js/README.md | 1001 +
node_modules/uglify-js/bin/extract-props.js | 77 +
node_modules/uglify-js/bin/uglifyjs | 635 +
node_modules/uglify-js/lib/ast.js | 1051 +
node_modules/uglify-js/lib/compress.js | 3997 +
node_modules/uglify-js/lib/mozilla-ast.js | 609 +
node_modules/uglify-js/lib/output.js | 1424 +
node_modules/uglify-js/lib/parse.js | 1572 +
node_modules/uglify-js/lib/propmangle.js | 264 +
node_modules/uglify-js/lib/scope.js | 661 +
node_modules/uglify-js/lib/sourcemap.js | 97 +
node_modules/uglify-js/lib/transform.js | 218 +
node_modules/uglify-js/lib/utils.js | 362 +
.../node_modules/source-map/CHANGELOG.md | 301 +
.../uglify-js/node_modules/source-map/LICENSE | 28 +
.../node_modules/source-map/README.md | 729 +
.../source-map/dist/source-map.debug.js | 3056 +
.../source-map/dist/source-map.js | 3055 +
.../source-map/dist/source-map.min.js | 2 +
.../source-map/dist/source-map.min.js.map | 1 +
.../node_modules/source-map/lib/array-set.js | 104 +
.../node_modules/source-map/lib/base64-vlq.js | 140 +
.../node_modules/source-map/lib/base64.js | 67 +
.../source-map/lib/binary-search.js | 111 +
.../source-map/lib/mapping-list.js | 79 +
.../node_modules/source-map/lib/quick-sort.js | 114 +
.../source-map/lib/source-map-consumer.js | 1082 +
.../source-map/lib/source-map-generator.js | 404 +
.../source-map/lib/source-node.js | 407 +
.../node_modules/source-map/lib/util.js | 417 +
.../node_modules/source-map/package.json | 254 +
.../node_modules/source-map/source-map.js | 8 +
node_modules/uglify-js/package.json | 128 +
node_modules/uglify-js/tools/domprops.json | 5603 +
node_modules/uglify-js/tools/exports.js | 19 +
node_modules/uglify-js/tools/node.js | 320 +
node_modules/uglify-js/tools/props.html | 61 +
node_modules/uglify-to-browserify/.npmignore | 14 +
node_modules/uglify-to-browserify/.travis.yml | 3 +
node_modules/uglify-to-browserify/LICENSE | 19 +
node_modules/uglify-to-browserify/README.md | 15 +
node_modules/uglify-to-browserify/index.js | 49 +
.../uglify-to-browserify/package.json | 80 +
.../uglify-to-browserify/test/index.js | 22 +
node_modules/umzug/.jshintrc | 44 +
node_modules/umzug/.npmignore | 30 +
node_modules/umzug/.travis.yml | 23 +
node_modules/umzug/CHANGELOG.md | 84 +
node_modules/umzug/LICENSE | 22 +
node_modules/umzug/README.md | 314 +
node_modules/umzug/gulpfile.js | 35 +
node_modules/umzug/index.js | 564 +
node_modules/umzug/lib/helper.js | 29 +
node_modules/umzug/lib/migration.js | 106 +
node_modules/umzug/lib/storages/json.js | 86 +
node_modules/umzug/lib/storages/none.js | 46 +
node_modules/umzug/lib/storages/sequelize.js | 170 +
.../umzug/node_modules/lodash/LICENSE | 47 +
.../umzug/node_modules/lodash/README.md | 39 +
.../umzug/node_modules/lodash/_DataView.js | 7 +
.../umzug/node_modules/lodash/_Hash.js | 32 +
.../umzug/node_modules/lodash/_LazyWrapper.js | 28 +
.../umzug/node_modules/lodash/_ListCache.js | 32 +
.../node_modules/lodash/_LodashWrapper.js | 22 +
.../umzug/node_modules/lodash/_Map.js | 7 +
.../umzug/node_modules/lodash/_MapCache.js | 32 +
.../umzug/node_modules/lodash/_Promise.js | 7 +
.../umzug/node_modules/lodash/_Set.js | 7 +
.../umzug/node_modules/lodash/_SetCache.js | 27 +
.../umzug/node_modules/lodash/_Stack.js | 27 +
.../umzug/node_modules/lodash/_Symbol.js | 6 +
.../umzug/node_modules/lodash/_Uint8Array.js | 6 +
.../umzug/node_modules/lodash/_WeakMap.js | 7 +
.../umzug/node_modules/lodash/_addMapEntry.js | 15 +
.../umzug/node_modules/lodash/_addSetEntry.js | 15 +
.../umzug/node_modules/lodash/_apply.js | 21 +
.../node_modules/lodash/_arrayAggregator.js | 22 +
.../umzug/node_modules/lodash/_arrayEach.js | 22 +
.../node_modules/lodash/_arrayEachRight.js | 21 +
.../umzug/node_modules/lodash/_arrayEvery.js | 23 +
.../umzug/node_modules/lodash/_arrayFilter.js | 25 +
.../node_modules/lodash/_arrayIncludes.js | 17 +
.../node_modules/lodash/_arrayIncludesWith.js | 22 +
.../node_modules/lodash/_arrayLikeKeys.js | 49 +
.../umzug/node_modules/lodash/_arrayMap.js | 21 +
.../umzug/node_modules/lodash/_arrayPush.js | 20 +
.../umzug/node_modules/lodash/_arrayReduce.js | 26 +
.../node_modules/lodash/_arrayReduceRight.js | 24 +
.../umzug/node_modules/lodash/_arraySample.js | 15 +
.../node_modules/lodash/_arraySampleSize.js | 17 +
.../node_modules/lodash/_arrayShuffle.js | 15 +
.../umzug/node_modules/lodash/_arraySome.js | 23 +
.../umzug/node_modules/lodash/_asciiSize.js | 12 +
.../node_modules/lodash/_asciiToArray.js | 12 +
.../umzug/node_modules/lodash/_asciiWords.js | 15 +
.../node_modules/lodash/_assignMergeValue.js | 20 +
.../umzug/node_modules/lodash/_assignValue.js | 28 +
.../node_modules/lodash/_assocIndexOf.js | 21 +
.../node_modules/lodash/_baseAggregator.js | 21 +
.../umzug/node_modules/lodash/_baseAssign.js | 17 +
.../node_modules/lodash/_baseAssignIn.js | 17 +
.../node_modules/lodash/_baseAssignValue.js | 25 +
.../umzug/node_modules/lodash/_baseAt.js | 23 +
.../umzug/node_modules/lodash/_baseClamp.js | 22 +
.../umzug/node_modules/lodash/_baseClone.js | 153 +
.../node_modules/lodash/_baseConforms.js | 18 +
.../node_modules/lodash/_baseConformsTo.js | 27 +
.../umzug/node_modules/lodash/_baseCreate.js | 30 +
.../umzug/node_modules/lodash/_baseDelay.js | 21 +
.../node_modules/lodash/_baseDifference.js | 67 +
.../umzug/node_modules/lodash/_baseEach.js | 14 +
.../node_modules/lodash/_baseEachRight.js | 14 +
.../umzug/node_modules/lodash/_baseEvery.js | 21 +
.../node_modules/lodash/_baseExtremum.js | 32 +
.../umzug/node_modules/lodash/_baseFill.js | 32 +
.../umzug/node_modules/lodash/_baseFilter.js | 21 +
.../node_modules/lodash/_baseFindIndex.js | 24 +
.../umzug/node_modules/lodash/_baseFindKey.js | 23 +
.../umzug/node_modules/lodash/_baseFlatten.js | 38 +
.../umzug/node_modules/lodash/_baseFor.js | 16 +
.../umzug/node_modules/lodash/_baseForOwn.js | 16 +
.../node_modules/lodash/_baseForOwnRight.js | 16 +
.../node_modules/lodash/_baseForRight.js | 15 +
.../node_modules/lodash/_baseFunctions.js | 19 +
.../umzug/node_modules/lodash/_baseGet.js | 24 +
.../node_modules/lodash/_baseGetAllKeys.js | 20 +
.../umzug/node_modules/lodash/_baseGetTag.js | 28 +
.../umzug/node_modules/lodash/_baseGt.js | 14 +
.../umzug/node_modules/lodash/_baseHas.js | 19 +
.../umzug/node_modules/lodash/_baseHasIn.js | 13 +
.../umzug/node_modules/lodash/_baseInRange.js | 18 +
.../umzug/node_modules/lodash/_baseIndexOf.js | 20 +
.../node_modules/lodash/_baseIndexOfWith.js | 23 +
.../node_modules/lodash/_baseIntersection.js | 74 +
.../node_modules/lodash/_baseInverter.js | 21 +
.../umzug/node_modules/lodash/_baseInvoke.js | 24 +
.../node_modules/lodash/_baseIsArguments.js | 18 +
.../node_modules/lodash/_baseIsArrayBuffer.js | 17 +
.../umzug/node_modules/lodash/_baseIsDate.js | 18 +
.../umzug/node_modules/lodash/_baseIsEqual.js | 28 +
.../node_modules/lodash/_baseIsEqualDeep.js | 83 +
.../umzug/node_modules/lodash/_baseIsMap.js | 18 +
.../umzug/node_modules/lodash/_baseIsMatch.js | 62 +
.../umzug/node_modules/lodash/_baseIsNaN.js | 12 +
.../node_modules/lodash/_baseIsNative.js | 47 +
.../node_modules/lodash/_baseIsRegExp.js | 18 +
.../umzug/node_modules/lodash/_baseIsSet.js | 18 +
.../node_modules/lodash/_baseIsTypedArray.js | 60 +
.../node_modules/lodash/_baseIteratee.js | 31 +
.../umzug/node_modules/lodash/_baseKeys.js | 30 +
.../umzug/node_modules/lodash/_baseKeysIn.js | 33 +
.../umzug/node_modules/lodash/_baseLodash.js | 10 +
.../umzug/node_modules/lodash/_baseLt.js | 14 +
.../umzug/node_modules/lodash/_baseMap.js | 22 +
.../umzug/node_modules/lodash/_baseMatches.js | 22 +
.../lodash/_baseMatchesProperty.js | 33 +
.../umzug/node_modules/lodash/_baseMean.js | 20 +
.../umzug/node_modules/lodash/_baseMerge.js | 41 +
.../node_modules/lodash/_baseMergeDeep.js | 93 +
.../umzug/node_modules/lodash/_baseNth.js | 20 +
.../umzug/node_modules/lodash/_baseOrderBy.js | 34 +
.../umzug/node_modules/lodash/_basePick.js | 19 +
.../umzug/node_modules/lodash/_basePickBy.js | 30 +
.../node_modules/lodash/_baseProperty.js | 14 +
.../node_modules/lodash/_basePropertyDeep.js | 16 +
.../node_modules/lodash/_basePropertyOf.js | 14 +
.../umzug/node_modules/lodash/_basePullAll.js | 51 +
.../umzug/node_modules/lodash/_basePullAt.js | 37 +
.../umzug/node_modules/lodash/_baseRandom.js | 18 +
.../umzug/node_modules/lodash/_baseRange.js | 28 +
.../umzug/node_modules/lodash/_baseReduce.js | 23 +
.../umzug/node_modules/lodash/_baseRepeat.js | 35 +
.../umzug/node_modules/lodash/_baseRest.js | 17 +
.../umzug/node_modules/lodash/_baseSample.js | 15 +
.../node_modules/lodash/_baseSampleSize.js | 18 +
.../umzug/node_modules/lodash/_baseSet.js | 47 +
.../umzug/node_modules/lodash/_baseSetData.js | 17 +
.../node_modules/lodash/_baseSetToString.js | 22 +
.../umzug/node_modules/lodash/_baseShuffle.js | 15 +
.../umzug/node_modules/lodash/_baseSlice.js | 31 +
.../umzug/node_modules/lodash/_baseSome.js | 22 +
.../umzug/node_modules/lodash/_baseSortBy.js | 21 +
.../node_modules/lodash/_baseSortedIndex.js | 42 +
.../node_modules/lodash/_baseSortedIndexBy.js | 64 +
.../node_modules/lodash/_baseSortedUniq.js | 30 +
.../umzug/node_modules/lodash/_baseSum.js | 24 +
.../umzug/node_modules/lodash/_baseTimes.js | 20 +
.../node_modules/lodash/_baseToNumber.js | 24 +
.../umzug/node_modules/lodash/_baseToPairs.js | 18 +
.../node_modules/lodash/_baseToString.js | 37 +
.../umzug/node_modules/lodash/_baseUnary.js | 14 +
.../umzug/node_modules/lodash/_baseUniq.js | 72 +
.../umzug/node_modules/lodash/_baseUnset.js | 20 +
.../umzug/node_modules/lodash/_baseUpdate.js | 18 +
.../umzug/node_modules/lodash/_baseValues.js | 19 +
.../umzug/node_modules/lodash/_baseWhile.js | 26 +
.../node_modules/lodash/_baseWrapperValue.js | 25 +
.../umzug/node_modules/lodash/_baseXor.js | 36 +
.../node_modules/lodash/_baseZipObject.js | 23 +
.../umzug/node_modules/lodash/_cacheHas.js | 13 +
.../lodash/_castArrayLikeObject.js | 14 +
.../node_modules/lodash/_castFunction.js | 14 +
.../umzug/node_modules/lodash/_castPath.js | 21 +
.../umzug/node_modules/lodash/_castRest.js | 14 +
.../umzug/node_modules/lodash/_castSlice.js | 18 +
.../node_modules/lodash/_charsEndIndex.js | 19 +
.../node_modules/lodash/_charsStartIndex.js | 20 +
.../node_modules/lodash/_cloneArrayBuffer.js | 16 +
.../umzug/node_modules/lodash/_cloneBuffer.js | 35 +
.../node_modules/lodash/_cloneDataView.js | 16 +
.../umzug/node_modules/lodash/_cloneMap.js | 22 +
.../umzug/node_modules/lodash/_cloneRegExp.js | 17 +
.../umzug/node_modules/lodash/_cloneSet.js | 22 +
.../umzug/node_modules/lodash/_cloneSymbol.js | 18 +
.../node_modules/lodash/_cloneTypedArray.js | 16 +
.../node_modules/lodash/_compareAscending.js | 41 +
.../node_modules/lodash/_compareMultiple.js | 44 +
.../umzug/node_modules/lodash/_composeArgs.js | 39 +
.../node_modules/lodash/_composeArgsRight.js | 41 +
.../umzug/node_modules/lodash/_copyArray.js | 20 +
.../umzug/node_modules/lodash/_copyObject.js | 40 +
.../umzug/node_modules/lodash/_copySymbols.js | 16 +
.../node_modules/lodash/_copySymbolsIn.js | 16 +
.../umzug/node_modules/lodash/_coreJsData.js | 6 +
.../node_modules/lodash/_countHolders.js | 21 +
.../node_modules/lodash/_createAggregator.js | 23 +
.../node_modules/lodash/_createAssigner.js | 37 +
.../node_modules/lodash/_createBaseEach.js | 32 +
.../node_modules/lodash/_createBaseFor.js | 25 +
.../umzug/node_modules/lodash/_createBind.js | 28 +
.../node_modules/lodash/_createCaseFirst.js | 33 +
.../node_modules/lodash/_createCompounder.js | 24 +
.../umzug/node_modules/lodash/_createCtor.js | 37 +
.../umzug/node_modules/lodash/_createCurry.js | 46 +
.../umzug/node_modules/lodash/_createFind.js | 25 +
.../umzug/node_modules/lodash/_createFlow.js | 78 +
.../node_modules/lodash/_createHybrid.js | 92 +
.../node_modules/lodash/_createInverter.js | 17 +
.../lodash/_createMathOperation.js | 38 +
.../umzug/node_modules/lodash/_createOver.js | 27 +
.../node_modules/lodash/_createPadding.js | 33 +
.../node_modules/lodash/_createPartial.js | 43 +
.../umzug/node_modules/lodash/_createRange.js | 30 +
.../node_modules/lodash/_createRecurry.js | 56 +
.../lodash/_createRelationalOperation.js | 20 +
.../umzug/node_modules/lodash/_createRound.js | 33 +
.../umzug/node_modules/lodash/_createSet.js | 19 +
.../node_modules/lodash/_createToPairs.js | 30 +
.../umzug/node_modules/lodash/_createWrap.js | 106 +
.../lodash/_customDefaultsAssignIn.js | 29 +
.../lodash/_customDefaultsMerge.js | 28 +
.../node_modules/lodash/_customOmitClone.js | 16 +
.../node_modules/lodash/_deburrLetter.js | 71 +
.../node_modules/lodash/_defineProperty.js | 11 +
.../umzug/node_modules/lodash/_equalArrays.js | 83 +
.../umzug/node_modules/lodash/_equalByTag.js | 112 +
.../node_modules/lodash/_equalObjects.js | 89 +
.../node_modules/lodash/_escapeHtmlChar.js | 21 +
.../node_modules/lodash/_escapeStringChar.js | 22 +
.../umzug/node_modules/lodash/_flatRest.js | 16 +
.../umzug/node_modules/lodash/_freeGlobal.js | 4 +
.../umzug/node_modules/lodash/_getAllKeys.js | 16 +
.../node_modules/lodash/_getAllKeysIn.js | 17 +
.../umzug/node_modules/lodash/_getData.js | 15 +
.../umzug/node_modules/lodash/_getFuncName.js | 31 +
.../umzug/node_modules/lodash/_getHolder.js | 13 +
.../umzug/node_modules/lodash/_getMapData.js | 18 +
.../node_modules/lodash/_getMatchData.js | 24 +
.../umzug/node_modules/lodash/_getNative.js | 17 +
.../node_modules/lodash/_getPrototype.js | 6 +
.../umzug/node_modules/lodash/_getRawTag.js | 46 +
.../umzug/node_modules/lodash/_getSymbols.js | 30 +
.../node_modules/lodash/_getSymbolsIn.js | 25 +
.../umzug/node_modules/lodash/_getTag.js | 58 +
.../umzug/node_modules/lodash/_getValue.js | 13 +
.../umzug/node_modules/lodash/_getView.js | 33 +
.../node_modules/lodash/_getWrapDetails.js | 17 +
.../umzug/node_modules/lodash/_hasPath.js | 39 +
.../umzug/node_modules/lodash/_hasUnicode.js | 26 +
.../node_modules/lodash/_hasUnicodeWord.js | 15 +
.../umzug/node_modules/lodash/_hashClear.js | 15 +
.../umzug/node_modules/lodash/_hashDelete.js | 17 +
.../umzug/node_modules/lodash/_hashGet.js | 30 +
.../umzug/node_modules/lodash/_hashHas.js | 23 +
.../umzug/node_modules/lodash/_hashSet.js | 23 +
.../node_modules/lodash/_initCloneArray.js | 26 +
.../node_modules/lodash/_initCloneByTag.js | 80 +
.../node_modules/lodash/_initCloneObject.js | 18 +
.../node_modules/lodash/_insertWrapDetails.js | 23 +
.../node_modules/lodash/_isFlattenable.js | 20 +
.../umzug/node_modules/lodash/_isIndex.js | 22 +
.../node_modules/lodash/_isIterateeCall.js | 30 +
.../umzug/node_modules/lodash/_isKey.js | 29 +
.../umzug/node_modules/lodash/_isKeyable.js | 15 +
.../umzug/node_modules/lodash/_isLaziable.js | 28 +
.../umzug/node_modules/lodash/_isMaskable.js | 14 +
.../umzug/node_modules/lodash/_isMasked.js | 20 +
.../umzug/node_modules/lodash/_isPrototype.js | 18 +
.../lodash/_isStrictComparable.js | 15 +
.../node_modules/lodash/_iteratorToArray.js | 18 +
.../umzug/node_modules/lodash/_lazyClone.js | 23 +
.../umzug/node_modules/lodash/_lazyReverse.js | 23 +
.../umzug/node_modules/lodash/_lazyValue.js | 69 +
.../node_modules/lodash/_listCacheClear.js | 13 +
.../node_modules/lodash/_listCacheDelete.js | 35 +
.../node_modules/lodash/_listCacheGet.js | 19 +
.../node_modules/lodash/_listCacheHas.js | 16 +
.../node_modules/lodash/_listCacheSet.js | 26 +
.../node_modules/lodash/_mapCacheClear.js | 21 +
.../node_modules/lodash/_mapCacheDelete.js | 18 +
.../umzug/node_modules/lodash/_mapCacheGet.js | 16 +
.../umzug/node_modules/lodash/_mapCacheHas.js | 16 +
.../umzug/node_modules/lodash/_mapCacheSet.js | 22 +
.../umzug/node_modules/lodash/_mapToArray.js | 18 +
.../lodash/_matchesStrictComparable.js | 20 +
.../node_modules/lodash/_memoizeCapped.js | 26 +
.../umzug/node_modules/lodash/_mergeData.js | 90 +
.../umzug/node_modules/lodash/_metaMap.js | 6 +
.../node_modules/lodash/_nativeCreate.js | 6 +
.../umzug/node_modules/lodash/_nativeKeys.js | 6 +
.../node_modules/lodash/_nativeKeysIn.js | 20 +
.../umzug/node_modules/lodash/_nodeUtil.js | 22 +
.../node_modules/lodash/_objectToString.js | 22 +
.../umzug/node_modules/lodash/_overArg.js | 15 +
.../umzug/node_modules/lodash/_overRest.js | 36 +
.../umzug/node_modules/lodash/_parent.js | 16 +
.../umzug/node_modules/lodash/_reEscape.js | 4 +
.../umzug/node_modules/lodash/_reEvaluate.js | 4 +
.../node_modules/lodash/_reInterpolate.js | 4 +
.../umzug/node_modules/lodash/_realNames.js | 4 +
.../umzug/node_modules/lodash/_reorder.js | 29 +
.../node_modules/lodash/_replaceHolders.js | 29 +
.../umzug/node_modules/lodash/_root.js | 9 +
.../umzug/node_modules/lodash/_setCacheAdd.js | 19 +
.../umzug/node_modules/lodash/_setCacheHas.js | 14 +
.../umzug/node_modules/lodash/_setData.js | 20 +
.../umzug/node_modules/lodash/_setToArray.js | 18 +
.../umzug/node_modules/lodash/_setToPairs.js | 18 +
.../umzug/node_modules/lodash/_setToString.js | 14 +
.../node_modules/lodash/_setWrapToString.js | 21 +
.../umzug/node_modules/lodash/_shortOut.js | 37 +
.../umzug/node_modules/lodash/_shuffleSelf.js | 28 +
.../umzug/node_modules/lodash/_stackClear.js | 15 +
.../umzug/node_modules/lodash/_stackDelete.js | 18 +
.../umzug/node_modules/lodash/_stackGet.js | 14 +
.../umzug/node_modules/lodash/_stackHas.js | 14 +
.../umzug/node_modules/lodash/_stackSet.js | 34 +
.../node_modules/lodash/_strictIndexOf.js | 23 +
.../node_modules/lodash/_strictLastIndexOf.js | 21 +
.../umzug/node_modules/lodash/_stringSize.js | 18 +
.../node_modules/lodash/_stringToArray.js | 18 +
.../node_modules/lodash/_stringToPath.js | 28 +
.../umzug/node_modules/lodash/_toKey.js | 21 +
.../umzug/node_modules/lodash/_toSource.js | 26 +
.../node_modules/lodash/_unescapeHtmlChar.js | 21 +
.../umzug/node_modules/lodash/_unicodeSize.js | 44 +
.../node_modules/lodash/_unicodeToArray.js | 40 +
.../node_modules/lodash/_unicodeWords.js | 69 +
.../node_modules/lodash/_updateWrapDetails.js | 46 +
.../node_modules/lodash/_wrapperClone.js | 23 +
node_modules/umzug/node_modules/lodash/add.js | 22 +
.../umzug/node_modules/lodash/after.js | 42 +
.../umzug/node_modules/lodash/array.js | 67 +
node_modules/umzug/node_modules/lodash/ary.js | 29 +
.../umzug/node_modules/lodash/assign.js | 58 +
.../umzug/node_modules/lodash/assignIn.js | 40 +
.../umzug/node_modules/lodash/assignInWith.js | 38 +
.../umzug/node_modules/lodash/assignWith.js | 37 +
node_modules/umzug/node_modules/lodash/at.js | 23 +
.../umzug/node_modules/lodash/attempt.js | 35 +
.../umzug/node_modules/lodash/before.js | 40 +
.../umzug/node_modules/lodash/bind.js | 57 +
.../umzug/node_modules/lodash/bindAll.js | 41 +
.../umzug/node_modules/lodash/bindKey.js | 68 +
.../umzug/node_modules/lodash/camelCase.js | 29 +
.../umzug/node_modules/lodash/capitalize.js | 23 +
.../umzug/node_modules/lodash/castArray.js | 44 +
.../umzug/node_modules/lodash/ceil.js | 26 +
.../umzug/node_modules/lodash/chain.js | 38 +
.../umzug/node_modules/lodash/chunk.js | 50 +
.../umzug/node_modules/lodash/clamp.js | 39 +
.../umzug/node_modules/lodash/clone.js | 36 +
.../umzug/node_modules/lodash/cloneDeep.js | 29 +
.../node_modules/lodash/cloneDeepWith.js | 40 +
.../umzug/node_modules/lodash/cloneWith.js | 42 +
.../umzug/node_modules/lodash/collection.js | 30 +
.../umzug/node_modules/lodash/commit.js | 33 +
.../umzug/node_modules/lodash/compact.js | 31 +
.../umzug/node_modules/lodash/concat.js | 43 +
.../umzug/node_modules/lodash/cond.js | 60 +
.../umzug/node_modules/lodash/conforms.js | 35 +
.../umzug/node_modules/lodash/conformsTo.js | 32 +
.../umzug/node_modules/lodash/constant.js | 26 +
.../umzug/node_modules/lodash/core.js | 3836 +
.../umzug/node_modules/lodash/core.min.js | 29 +
.../umzug/node_modules/lodash/countBy.js | 40 +
.../umzug/node_modules/lodash/create.js | 43 +
.../umzug/node_modules/lodash/curry.js | 57 +
.../umzug/node_modules/lodash/curryRight.js | 54 +
.../umzug/node_modules/lodash/date.js | 3 +
.../umzug/node_modules/lodash/debounce.js | 188 +
.../umzug/node_modules/lodash/deburr.js | 45 +
.../umzug/node_modules/lodash/defaultTo.js | 25 +
.../umzug/node_modules/lodash/defaults.js | 32 +
.../umzug/node_modules/lodash/defaultsDeep.js | 30 +
.../umzug/node_modules/lodash/defer.js | 26 +
.../umzug/node_modules/lodash/delay.js | 28 +
.../umzug/node_modules/lodash/difference.js | 33 +
.../umzug/node_modules/lodash/differenceBy.js | 44 +
.../node_modules/lodash/differenceWith.js | 40 +
.../umzug/node_modules/lodash/divide.js | 22 +
.../umzug/node_modules/lodash/drop.js | 38 +
.../umzug/node_modules/lodash/dropRight.js | 39 +
.../node_modules/lodash/dropRightWhile.js | 45 +
.../umzug/node_modules/lodash/dropWhile.js | 45 +
.../umzug/node_modules/lodash/each.js | 1 +
.../umzug/node_modules/lodash/eachRight.js | 1 +
.../umzug/node_modules/lodash/endsWith.js | 43 +
.../umzug/node_modules/lodash/entries.js | 1 +
.../umzug/node_modules/lodash/entriesIn.js | 1 +
node_modules/umzug/node_modules/lodash/eq.js | 37 +
.../umzug/node_modules/lodash/escape.js | 43 +
.../umzug/node_modules/lodash/escapeRegExp.js | 32 +
.../umzug/node_modules/lodash/every.js | 56 +
.../umzug/node_modules/lodash/extend.js | 1 +
.../umzug/node_modules/lodash/extendWith.js | 1 +
.../umzug/node_modules/lodash/fill.js | 45 +
.../umzug/node_modules/lodash/filter.js | 48 +
.../umzug/node_modules/lodash/find.js | 42 +
.../umzug/node_modules/lodash/findIndex.js | 55 +
.../umzug/node_modules/lodash/findKey.js | 44 +
.../umzug/node_modules/lodash/findLast.js | 25 +
.../node_modules/lodash/findLastIndex.js | 59 +
.../umzug/node_modules/lodash/findLastKey.js | 44 +
.../umzug/node_modules/lodash/first.js | 1 +
.../umzug/node_modules/lodash/flatMap.js | 29 +
.../umzug/node_modules/lodash/flatMapDeep.js | 31 +
.../umzug/node_modules/lodash/flatMapDepth.js | 31 +
.../umzug/node_modules/lodash/flatten.js | 22 +
.../umzug/node_modules/lodash/flattenDeep.js | 25 +
.../umzug/node_modules/lodash/flattenDepth.js | 33 +
.../umzug/node_modules/lodash/flip.js | 28 +
.../umzug/node_modules/lodash/floor.js | 26 +
.../umzug/node_modules/lodash/flow.js | 27 +
.../umzug/node_modules/lodash/flowRight.js | 26 +
.../umzug/node_modules/lodash/forEach.js | 41 +
.../umzug/node_modules/lodash/forEachRight.js | 31 +
.../umzug/node_modules/lodash/forIn.js | 39 +
.../umzug/node_modules/lodash/forInRight.js | 37 +
.../umzug/node_modules/lodash/forOwn.js | 36 +
.../umzug/node_modules/lodash/forOwnRight.js | 34 +
node_modules/umzug/node_modules/lodash/fp.js | 2 +
.../umzug/node_modules/lodash/fp/F.js | 1 +
.../umzug/node_modules/lodash/fp/T.js | 1 +
.../umzug/node_modules/lodash/fp/__.js | 1 +
.../node_modules/lodash/fp/_baseConvert.js | 568 +
.../node_modules/lodash/fp/_convertBrowser.js | 18 +
.../node_modules/lodash/fp/_falseOptions.js | 7 +
.../umzug/node_modules/lodash/fp/_mapping.js | 368 +
.../umzug/node_modules/lodash/fp/_util.js | 14 +
.../umzug/node_modules/lodash/fp/add.js | 5 +
.../umzug/node_modules/lodash/fp/after.js | 5 +
.../umzug/node_modules/lodash/fp/all.js | 1 +
.../umzug/node_modules/lodash/fp/allPass.js | 1 +
.../umzug/node_modules/lodash/fp/always.js | 1 +
.../umzug/node_modules/lodash/fp/any.js | 1 +
.../umzug/node_modules/lodash/fp/anyPass.js | 1 +
.../umzug/node_modules/lodash/fp/apply.js | 1 +
.../umzug/node_modules/lodash/fp/array.js | 2 +
.../umzug/node_modules/lodash/fp/ary.js | 5 +
.../umzug/node_modules/lodash/fp/assign.js | 5 +
.../umzug/node_modules/lodash/fp/assignAll.js | 5 +
.../node_modules/lodash/fp/assignAllWith.js | 5 +
.../umzug/node_modules/lodash/fp/assignIn.js | 5 +
.../node_modules/lodash/fp/assignInAll.js | 5 +
.../node_modules/lodash/fp/assignInAllWith.js | 5 +
.../node_modules/lodash/fp/assignInWith.js | 5 +
.../node_modules/lodash/fp/assignWith.js | 5 +
.../umzug/node_modules/lodash/fp/assoc.js | 1 +
.../umzug/node_modules/lodash/fp/assocPath.js | 1 +
.../umzug/node_modules/lodash/fp/at.js | 5 +
.../umzug/node_modules/lodash/fp/attempt.js | 5 +
.../umzug/node_modules/lodash/fp/before.js | 5 +
.../umzug/node_modules/lodash/fp/bind.js | 5 +
.../umzug/node_modules/lodash/fp/bindAll.js | 5 +
.../umzug/node_modules/lodash/fp/bindKey.js | 5 +
.../umzug/node_modules/lodash/fp/camelCase.js | 5 +
.../node_modules/lodash/fp/capitalize.js | 5 +
.../umzug/node_modules/lodash/fp/castArray.js | 5 +
.../umzug/node_modules/lodash/fp/ceil.js | 5 +
.../umzug/node_modules/lodash/fp/chain.js | 5 +
.../umzug/node_modules/lodash/fp/chunk.js | 5 +
.../umzug/node_modules/lodash/fp/clamp.js | 5 +
.../umzug/node_modules/lodash/fp/clone.js | 5 +
.../umzug/node_modules/lodash/fp/cloneDeep.js | 5 +
.../node_modules/lodash/fp/cloneDeepWith.js | 5 +
.../umzug/node_modules/lodash/fp/cloneWith.js | 5 +
.../node_modules/lodash/fp/collection.js | 2 +
.../umzug/node_modules/lodash/fp/commit.js | 5 +
.../umzug/node_modules/lodash/fp/compact.js | 5 +
.../node_modules/lodash/fp/complement.js | 1 +
.../umzug/node_modules/lodash/fp/compose.js | 1 +
.../umzug/node_modules/lodash/fp/concat.js | 5 +
.../umzug/node_modules/lodash/fp/cond.js | 5 +
.../umzug/node_modules/lodash/fp/conforms.js | 1 +
.../node_modules/lodash/fp/conformsTo.js | 5 +
.../umzug/node_modules/lodash/fp/constant.js | 5 +
.../umzug/node_modules/lodash/fp/contains.js | 1 +
.../umzug/node_modules/lodash/fp/convert.js | 18 +
.../umzug/node_modules/lodash/fp/countBy.js | 5 +
.../umzug/node_modules/lodash/fp/create.js | 5 +
.../umzug/node_modules/lodash/fp/curry.js | 5 +
.../umzug/node_modules/lodash/fp/curryN.js | 5 +
.../node_modules/lodash/fp/curryRight.js | 5 +
.../node_modules/lodash/fp/curryRightN.js | 5 +
.../umzug/node_modules/lodash/fp/date.js | 2 +
.../umzug/node_modules/lodash/fp/debounce.js | 5 +
.../umzug/node_modules/lodash/fp/deburr.js | 5 +
.../umzug/node_modules/lodash/fp/defaultTo.js | 5 +
.../umzug/node_modules/lodash/fp/defaults.js | 5 +
.../node_modules/lodash/fp/defaultsAll.js | 5 +
.../node_modules/lodash/fp/defaultsDeep.js | 5 +
.../node_modules/lodash/fp/defaultsDeepAll.js | 5 +
.../umzug/node_modules/lodash/fp/defer.js | 5 +
.../umzug/node_modules/lodash/fp/delay.js | 5 +
.../node_modules/lodash/fp/difference.js | 5 +
.../node_modules/lodash/fp/differenceBy.js | 5 +
.../node_modules/lodash/fp/differenceWith.js | 5 +
.../umzug/node_modules/lodash/fp/dissoc.js | 1 +
.../node_modules/lodash/fp/dissocPath.js | 1 +
.../umzug/node_modules/lodash/fp/divide.js | 5 +
.../umzug/node_modules/lodash/fp/drop.js | 5 +
.../umzug/node_modules/lodash/fp/dropLast.js | 1 +
.../node_modules/lodash/fp/dropLastWhile.js | 1 +
.../umzug/node_modules/lodash/fp/dropRight.js | 5 +
.../node_modules/lodash/fp/dropRightWhile.js | 5 +
.../umzug/node_modules/lodash/fp/dropWhile.js | 5 +
.../umzug/node_modules/lodash/fp/each.js | 1 +
.../umzug/node_modules/lodash/fp/eachRight.js | 1 +
.../umzug/node_modules/lodash/fp/endsWith.js | 5 +
.../umzug/node_modules/lodash/fp/entries.js | 1 +
.../umzug/node_modules/lodash/fp/entriesIn.js | 1 +
.../umzug/node_modules/lodash/fp/eq.js | 5 +
.../umzug/node_modules/lodash/fp/equals.js | 1 +
.../umzug/node_modules/lodash/fp/escape.js | 5 +
.../node_modules/lodash/fp/escapeRegExp.js | 5 +
.../umzug/node_modules/lodash/fp/every.js | 5 +
.../umzug/node_modules/lodash/fp/extend.js | 1 +
.../umzug/node_modules/lodash/fp/extendAll.js | 1 +
.../node_modules/lodash/fp/extendAllWith.js | 1 +
.../node_modules/lodash/fp/extendWith.js | 1 +
.../umzug/node_modules/lodash/fp/fill.js | 5 +
.../umzug/node_modules/lodash/fp/filter.js | 5 +
.../umzug/node_modules/lodash/fp/find.js | 5 +
.../umzug/node_modules/lodash/fp/findFrom.js | 5 +
.../umzug/node_modules/lodash/fp/findIndex.js | 5 +
.../node_modules/lodash/fp/findIndexFrom.js | 5 +
.../umzug/node_modules/lodash/fp/findKey.js | 5 +
.../umzug/node_modules/lodash/fp/findLast.js | 5 +
.../node_modules/lodash/fp/findLastFrom.js | 5 +
.../node_modules/lodash/fp/findLastIndex.js | 5 +
.../lodash/fp/findLastIndexFrom.js | 5 +
.../node_modules/lodash/fp/findLastKey.js | 5 +
.../umzug/node_modules/lodash/fp/first.js | 1 +
.../umzug/node_modules/lodash/fp/flatMap.js | 5 +
.../node_modules/lodash/fp/flatMapDeep.js | 5 +
.../node_modules/lodash/fp/flatMapDepth.js | 5 +
.../umzug/node_modules/lodash/fp/flatten.js | 5 +
.../node_modules/lodash/fp/flattenDeep.js | 5 +
.../node_modules/lodash/fp/flattenDepth.js | 5 +
.../umzug/node_modules/lodash/fp/flip.js | 5 +
.../umzug/node_modules/lodash/fp/floor.js | 5 +
.../umzug/node_modules/lodash/fp/flow.js | 5 +
.../umzug/node_modules/lodash/fp/flowRight.js | 5 +
.../umzug/node_modules/lodash/fp/forEach.js | 5 +
.../node_modules/lodash/fp/forEachRight.js | 5 +
.../umzug/node_modules/lodash/fp/forIn.js | 5 +
.../node_modules/lodash/fp/forInRight.js | 5 +
.../umzug/node_modules/lodash/fp/forOwn.js | 5 +
.../node_modules/lodash/fp/forOwnRight.js | 5 +
.../umzug/node_modules/lodash/fp/fromPairs.js | 5 +
.../umzug/node_modules/lodash/fp/function.js | 2 +
.../umzug/node_modules/lodash/fp/functions.js | 5 +
.../node_modules/lodash/fp/functionsIn.js | 5 +
.../umzug/node_modules/lodash/fp/get.js | 5 +
.../umzug/node_modules/lodash/fp/getOr.js | 5 +
.../umzug/node_modules/lodash/fp/groupBy.js | 5 +
.../umzug/node_modules/lodash/fp/gt.js | 5 +
.../umzug/node_modules/lodash/fp/gte.js | 5 +
.../umzug/node_modules/lodash/fp/has.js | 5 +
.../umzug/node_modules/lodash/fp/hasIn.js | 5 +
.../umzug/node_modules/lodash/fp/head.js | 5 +
.../umzug/node_modules/lodash/fp/identical.js | 1 +
.../umzug/node_modules/lodash/fp/identity.js | 5 +
.../umzug/node_modules/lodash/fp/inRange.js | 5 +
.../umzug/node_modules/lodash/fp/includes.js | 5 +
.../node_modules/lodash/fp/includesFrom.js | 5 +
.../umzug/node_modules/lodash/fp/indexBy.js | 1 +
.../umzug/node_modules/lodash/fp/indexOf.js | 5 +
.../node_modules/lodash/fp/indexOfFrom.js | 5 +
.../umzug/node_modules/lodash/fp/init.js | 1 +
.../umzug/node_modules/lodash/fp/initial.js | 5 +
.../node_modules/lodash/fp/intersection.js | 5 +
.../node_modules/lodash/fp/intersectionBy.js | 5 +
.../lodash/fp/intersectionWith.js | 5 +
.../umzug/node_modules/lodash/fp/invert.js | 5 +
.../umzug/node_modules/lodash/fp/invertBy.js | 5 +
.../umzug/node_modules/lodash/fp/invertObj.js | 1 +
.../umzug/node_modules/lodash/fp/invoke.js | 5 +
.../node_modules/lodash/fp/invokeArgs.js | 5 +
.../node_modules/lodash/fp/invokeArgsMap.js | 5 +
.../umzug/node_modules/lodash/fp/invokeMap.js | 5 +
.../node_modules/lodash/fp/isArguments.js | 5 +
.../umzug/node_modules/lodash/fp/isArray.js | 5 +
.../node_modules/lodash/fp/isArrayBuffer.js | 5 +
.../node_modules/lodash/fp/isArrayLike.js | 5 +
.../lodash/fp/isArrayLikeObject.js | 5 +
.../umzug/node_modules/lodash/fp/isBoolean.js | 5 +
.../umzug/node_modules/lodash/fp/isBuffer.js | 5 +
.../umzug/node_modules/lodash/fp/isDate.js | 5 +
.../umzug/node_modules/lodash/fp/isElement.js | 5 +
.../umzug/node_modules/lodash/fp/isEmpty.js | 5 +
.../umzug/node_modules/lodash/fp/isEqual.js | 5 +
.../node_modules/lodash/fp/isEqualWith.js | 5 +
.../umzug/node_modules/lodash/fp/isError.js | 5 +
.../umzug/node_modules/lodash/fp/isFinite.js | 5 +
.../node_modules/lodash/fp/isFunction.js | 5 +
.../umzug/node_modules/lodash/fp/isInteger.js | 5 +
.../umzug/node_modules/lodash/fp/isLength.js | 5 +
.../umzug/node_modules/lodash/fp/isMap.js | 5 +
.../umzug/node_modules/lodash/fp/isMatch.js | 5 +
.../node_modules/lodash/fp/isMatchWith.js | 5 +
.../umzug/node_modules/lodash/fp/isNaN.js | 5 +
.../umzug/node_modules/lodash/fp/isNative.js | 5 +
.../umzug/node_modules/lodash/fp/isNil.js | 5 +
.../umzug/node_modules/lodash/fp/isNull.js | 5 +
.../umzug/node_modules/lodash/fp/isNumber.js | 5 +
.../umzug/node_modules/lodash/fp/isObject.js | 5 +
.../node_modules/lodash/fp/isObjectLike.js | 5 +
.../node_modules/lodash/fp/isPlainObject.js | 5 +
.../umzug/node_modules/lodash/fp/isRegExp.js | 5 +
.../node_modules/lodash/fp/isSafeInteger.js | 5 +
.../umzug/node_modules/lodash/fp/isSet.js | 5 +
.../umzug/node_modules/lodash/fp/isString.js | 5 +
.../umzug/node_modules/lodash/fp/isSymbol.js | 5 +
.../node_modules/lodash/fp/isTypedArray.js | 5 +
.../node_modules/lodash/fp/isUndefined.js | 5 +
.../umzug/node_modules/lodash/fp/isWeakMap.js | 5 +
.../umzug/node_modules/lodash/fp/isWeakSet.js | 5 +
.../umzug/node_modules/lodash/fp/iteratee.js | 5 +
.../umzug/node_modules/lodash/fp/join.js | 5 +
.../umzug/node_modules/lodash/fp/juxt.js | 1 +
.../umzug/node_modules/lodash/fp/kebabCase.js | 5 +
.../umzug/node_modules/lodash/fp/keyBy.js | 5 +
.../umzug/node_modules/lodash/fp/keys.js | 5 +
.../umzug/node_modules/lodash/fp/keysIn.js | 5 +
.../umzug/node_modules/lodash/fp/lang.js | 2 +
.../umzug/node_modules/lodash/fp/last.js | 5 +
.../node_modules/lodash/fp/lastIndexOf.js | 5 +
.../node_modules/lodash/fp/lastIndexOfFrom.js | 5 +
.../umzug/node_modules/lodash/fp/lowerCase.js | 5 +
.../node_modules/lodash/fp/lowerFirst.js | 5 +
.../umzug/node_modules/lodash/fp/lt.js | 5 +
.../umzug/node_modules/lodash/fp/lte.js | 5 +
.../umzug/node_modules/lodash/fp/map.js | 5 +
.../umzug/node_modules/lodash/fp/mapKeys.js | 5 +
.../umzug/node_modules/lodash/fp/mapValues.js | 5 +
.../umzug/node_modules/lodash/fp/matches.js | 1 +
.../node_modules/lodash/fp/matchesProperty.js | 5 +
.../umzug/node_modules/lodash/fp/math.js | 2 +
.../umzug/node_modules/lodash/fp/max.js | 5 +
.../umzug/node_modules/lodash/fp/maxBy.js | 5 +
.../umzug/node_modules/lodash/fp/mean.js | 5 +
.../umzug/node_modules/lodash/fp/meanBy.js | 5 +
.../umzug/node_modules/lodash/fp/memoize.js | 5 +
.../umzug/node_modules/lodash/fp/merge.js | 5 +
.../umzug/node_modules/lodash/fp/mergeAll.js | 5 +
.../node_modules/lodash/fp/mergeAllWith.js | 5 +
.../umzug/node_modules/lodash/fp/mergeWith.js | 5 +
.../umzug/node_modules/lodash/fp/method.js | 5 +
.../umzug/node_modules/lodash/fp/methodOf.js | 5 +
.../umzug/node_modules/lodash/fp/min.js | 5 +
.../umzug/node_modules/lodash/fp/minBy.js | 5 +
.../umzug/node_modules/lodash/fp/mixin.js | 5 +
.../umzug/node_modules/lodash/fp/multiply.js | 5 +
.../umzug/node_modules/lodash/fp/nAry.js | 1 +
.../umzug/node_modules/lodash/fp/negate.js | 5 +
.../umzug/node_modules/lodash/fp/next.js | 5 +
.../umzug/node_modules/lodash/fp/noop.js | 5 +
.../umzug/node_modules/lodash/fp/now.js | 5 +
.../umzug/node_modules/lodash/fp/nth.js | 5 +
.../umzug/node_modules/lodash/fp/nthArg.js | 5 +
.../umzug/node_modules/lodash/fp/number.js | 2 +
.../umzug/node_modules/lodash/fp/object.js | 2 +
.../umzug/node_modules/lodash/fp/omit.js | 5 +
.../umzug/node_modules/lodash/fp/omitAll.js | 1 +
.../umzug/node_modules/lodash/fp/omitBy.js | 5 +
.../umzug/node_modules/lodash/fp/once.js | 5 +
.../umzug/node_modules/lodash/fp/orderBy.js | 5 +
.../umzug/node_modules/lodash/fp/over.js | 5 +
.../umzug/node_modules/lodash/fp/overArgs.js | 5 +
.../umzug/node_modules/lodash/fp/overEvery.js | 5 +
.../umzug/node_modules/lodash/fp/overSome.js | 5 +
.../umzug/node_modules/lodash/fp/pad.js | 5 +
.../umzug/node_modules/lodash/fp/padChars.js | 5 +
.../node_modules/lodash/fp/padCharsEnd.js | 5 +
.../node_modules/lodash/fp/padCharsStart.js | 5 +
.../umzug/node_modules/lodash/fp/padEnd.js | 5 +
.../umzug/node_modules/lodash/fp/padStart.js | 5 +
.../umzug/node_modules/lodash/fp/parseInt.js | 5 +
.../umzug/node_modules/lodash/fp/partial.js | 5 +
.../node_modules/lodash/fp/partialRight.js | 5 +
.../umzug/node_modules/lodash/fp/partition.js | 5 +
.../umzug/node_modules/lodash/fp/path.js | 1 +
.../umzug/node_modules/lodash/fp/pathEq.js | 1 +
.../umzug/node_modules/lodash/fp/pathOr.js | 1 +
.../umzug/node_modules/lodash/fp/paths.js | 1 +
.../umzug/node_modules/lodash/fp/pick.js | 5 +
.../umzug/node_modules/lodash/fp/pickAll.js | 1 +
.../umzug/node_modules/lodash/fp/pickBy.js | 5 +
.../umzug/node_modules/lodash/fp/pipe.js | 1 +
.../node_modules/lodash/fp/placeholder.js | 6 +
.../umzug/node_modules/lodash/fp/plant.js | 5 +
.../umzug/node_modules/lodash/fp/pluck.js | 1 +
.../umzug/node_modules/lodash/fp/prop.js | 1 +
.../umzug/node_modules/lodash/fp/propEq.js | 1 +
.../umzug/node_modules/lodash/fp/propOr.js | 1 +
.../umzug/node_modules/lodash/fp/property.js | 1 +
.../node_modules/lodash/fp/propertyOf.js | 5 +
.../umzug/node_modules/lodash/fp/props.js | 1 +
.../umzug/node_modules/lodash/fp/pull.js | 5 +
.../umzug/node_modules/lodash/fp/pullAll.js | 5 +
.../umzug/node_modules/lodash/fp/pullAllBy.js | 5 +
.../node_modules/lodash/fp/pullAllWith.js | 5 +
.../umzug/node_modules/lodash/fp/pullAt.js | 5 +
.../umzug/node_modules/lodash/fp/random.js | 5 +
.../umzug/node_modules/lodash/fp/range.js | 5 +
.../node_modules/lodash/fp/rangeRight.js | 5 +
.../umzug/node_modules/lodash/fp/rangeStep.js | 5 +
.../node_modules/lodash/fp/rangeStepRight.js | 5 +
.../umzug/node_modules/lodash/fp/rearg.js | 5 +
.../umzug/node_modules/lodash/fp/reduce.js | 5 +
.../node_modules/lodash/fp/reduceRight.js | 5 +
.../umzug/node_modules/lodash/fp/reject.js | 5 +
.../umzug/node_modules/lodash/fp/remove.js | 5 +
.../umzug/node_modules/lodash/fp/repeat.js | 5 +
.../umzug/node_modules/lodash/fp/replace.js | 5 +
.../umzug/node_modules/lodash/fp/rest.js | 5 +
.../umzug/node_modules/lodash/fp/restFrom.js | 5 +
.../umzug/node_modules/lodash/fp/result.js | 5 +
.../umzug/node_modules/lodash/fp/reverse.js | 5 +
.../umzug/node_modules/lodash/fp/round.js | 5 +
.../umzug/node_modules/lodash/fp/sample.js | 5 +
.../node_modules/lodash/fp/sampleSize.js | 5 +
.../umzug/node_modules/lodash/fp/seq.js | 2 +
.../umzug/node_modules/lodash/fp/set.js | 5 +
.../umzug/node_modules/lodash/fp/setWith.js | 5 +
.../umzug/node_modules/lodash/fp/shuffle.js | 5 +
.../umzug/node_modules/lodash/fp/size.js | 5 +
.../umzug/node_modules/lodash/fp/slice.js | 5 +
.../umzug/node_modules/lodash/fp/snakeCase.js | 5 +
.../umzug/node_modules/lodash/fp/some.js | 5 +
.../umzug/node_modules/lodash/fp/sortBy.js | 5 +
.../node_modules/lodash/fp/sortedIndex.js | 5 +
.../node_modules/lodash/fp/sortedIndexBy.js | 5 +
.../node_modules/lodash/fp/sortedIndexOf.js | 5 +
.../node_modules/lodash/fp/sortedLastIndex.js | 5 +
.../lodash/fp/sortedLastIndexBy.js | 5 +
.../lodash/fp/sortedLastIndexOf.js | 5 +
.../node_modules/lodash/fp/sortedUniq.js | 5 +
.../node_modules/lodash/fp/sortedUniqBy.js | 5 +
.../umzug/node_modules/lodash/fp/split.js | 5 +
.../umzug/node_modules/lodash/fp/spread.js | 5 +
.../node_modules/lodash/fp/spreadFrom.js | 5 +
.../umzug/node_modules/lodash/fp/startCase.js | 5 +
.../node_modules/lodash/fp/startsWith.js | 5 +
.../umzug/node_modules/lodash/fp/string.js | 2 +
.../umzug/node_modules/lodash/fp/stubArray.js | 5 +
.../umzug/node_modules/lodash/fp/stubFalse.js | 5 +
.../node_modules/lodash/fp/stubObject.js | 5 +
.../node_modules/lodash/fp/stubString.js | 5 +
.../umzug/node_modules/lodash/fp/stubTrue.js | 5 +
.../umzug/node_modules/lodash/fp/subtract.js | 5 +
.../umzug/node_modules/lodash/fp/sum.js | 5 +
.../umzug/node_modules/lodash/fp/sumBy.js | 5 +
.../lodash/fp/symmetricDifference.js | 1 +
.../lodash/fp/symmetricDifferenceBy.js | 1 +
.../lodash/fp/symmetricDifferenceWith.js | 1 +
.../umzug/node_modules/lodash/fp/tail.js | 5 +
.../umzug/node_modules/lodash/fp/take.js | 5 +
.../umzug/node_modules/lodash/fp/takeLast.js | 1 +
.../node_modules/lodash/fp/takeLastWhile.js | 1 +
.../umzug/node_modules/lodash/fp/takeRight.js | 5 +
.../node_modules/lodash/fp/takeRightWhile.js | 5 +
.../umzug/node_modules/lodash/fp/takeWhile.js | 5 +
.../umzug/node_modules/lodash/fp/tap.js | 5 +
.../umzug/node_modules/lodash/fp/template.js | 5 +
.../lodash/fp/templateSettings.js | 5 +
.../umzug/node_modules/lodash/fp/throttle.js | 5 +
.../umzug/node_modules/lodash/fp/thru.js | 5 +
.../umzug/node_modules/lodash/fp/times.js | 5 +
.../umzug/node_modules/lodash/fp/toArray.js | 5 +
.../umzug/node_modules/lodash/fp/toFinite.js | 5 +
.../umzug/node_modules/lodash/fp/toInteger.js | 5 +
.../node_modules/lodash/fp/toIterator.js | 5 +
.../umzug/node_modules/lodash/fp/toJSON.js | 5 +
.../umzug/node_modules/lodash/fp/toLength.js | 5 +
.../umzug/node_modules/lodash/fp/toLower.js | 5 +
.../umzug/node_modules/lodash/fp/toNumber.js | 5 +
.../umzug/node_modules/lodash/fp/toPairs.js | 5 +
.../umzug/node_modules/lodash/fp/toPairsIn.js | 5 +
.../umzug/node_modules/lodash/fp/toPath.js | 5 +
.../node_modules/lodash/fp/toPlainObject.js | 5 +
.../node_modules/lodash/fp/toSafeInteger.js | 5 +
.../umzug/node_modules/lodash/fp/toString.js | 5 +
.../umzug/node_modules/lodash/fp/toUpper.js | 5 +
.../umzug/node_modules/lodash/fp/transform.js | 5 +
.../umzug/node_modules/lodash/fp/trim.js | 5 +
.../umzug/node_modules/lodash/fp/trimChars.js | 5 +
.../node_modules/lodash/fp/trimCharsEnd.js | 5 +
.../node_modules/lodash/fp/trimCharsStart.js | 5 +
.../umzug/node_modules/lodash/fp/trimEnd.js | 5 +
.../umzug/node_modules/lodash/fp/trimStart.js | 5 +
.../umzug/node_modules/lodash/fp/truncate.js | 5 +
.../umzug/node_modules/lodash/fp/unapply.js | 1 +
.../umzug/node_modules/lodash/fp/unary.js | 5 +
.../umzug/node_modules/lodash/fp/unescape.js | 5 +
.../umzug/node_modules/lodash/fp/union.js | 5 +
.../umzug/node_modules/lodash/fp/unionBy.js | 5 +
.../umzug/node_modules/lodash/fp/unionWith.js | 5 +
.../umzug/node_modules/lodash/fp/uniq.js | 5 +
.../umzug/node_modules/lodash/fp/uniqBy.js | 5 +
.../umzug/node_modules/lodash/fp/uniqWith.js | 5 +
.../umzug/node_modules/lodash/fp/uniqueId.js | 5 +
.../umzug/node_modules/lodash/fp/unnest.js | 1 +
.../umzug/node_modules/lodash/fp/unset.js | 5 +
.../umzug/node_modules/lodash/fp/unzip.js | 5 +
.../umzug/node_modules/lodash/fp/unzipWith.js | 5 +
.../umzug/node_modules/lodash/fp/update.js | 5 +
.../node_modules/lodash/fp/updateWith.js | 5 +
.../umzug/node_modules/lodash/fp/upperCase.js | 5 +
.../node_modules/lodash/fp/upperFirst.js | 5 +
.../umzug/node_modules/lodash/fp/useWith.js | 1 +
.../umzug/node_modules/lodash/fp/util.js | 2 +
.../umzug/node_modules/lodash/fp/value.js | 5 +
.../umzug/node_modules/lodash/fp/valueOf.js | 5 +
.../umzug/node_modules/lodash/fp/values.js | 5 +
.../umzug/node_modules/lodash/fp/valuesIn.js | 5 +
.../umzug/node_modules/lodash/fp/where.js | 1 +
.../umzug/node_modules/lodash/fp/whereEq.js | 1 +
.../umzug/node_modules/lodash/fp/without.js | 5 +
.../umzug/node_modules/lodash/fp/words.js | 5 +
.../umzug/node_modules/lodash/fp/wrap.js | 5 +
.../umzug/node_modules/lodash/fp/wrapperAt.js | 5 +
.../node_modules/lodash/fp/wrapperChain.js | 5 +
.../node_modules/lodash/fp/wrapperLodash.js | 5 +
.../node_modules/lodash/fp/wrapperReverse.js | 5 +
.../node_modules/lodash/fp/wrapperValue.js | 5 +
.../umzug/node_modules/lodash/fp/xor.js | 5 +
.../umzug/node_modules/lodash/fp/xorBy.js | 5 +
.../umzug/node_modules/lodash/fp/xorWith.js | 5 +
.../umzug/node_modules/lodash/fp/zip.js | 5 +
.../umzug/node_modules/lodash/fp/zipAll.js | 5 +
.../umzug/node_modules/lodash/fp/zipObj.js | 1 +
.../umzug/node_modules/lodash/fp/zipObject.js | 5 +
.../node_modules/lodash/fp/zipObjectDeep.js | 5 +
.../umzug/node_modules/lodash/fp/zipWith.js | 5 +
.../umzug/node_modules/lodash/fromPairs.js | 28 +
.../umzug/node_modules/lodash/function.js | 25 +
.../umzug/node_modules/lodash/functions.js | 31 +
.../umzug/node_modules/lodash/functionsIn.js | 31 +
node_modules/umzug/node_modules/lodash/get.js | 33 +
.../umzug/node_modules/lodash/groupBy.js | 41 +
node_modules/umzug/node_modules/lodash/gt.js | 29 +
node_modules/umzug/node_modules/lodash/gte.js | 30 +
node_modules/umzug/node_modules/lodash/has.js | 35 +
.../umzug/node_modules/lodash/hasIn.js | 34 +
.../umzug/node_modules/lodash/head.js | 23 +
.../umzug/node_modules/lodash/identity.js | 21 +
.../umzug/node_modules/lodash/inRange.js | 55 +
.../umzug/node_modules/lodash/includes.js | 53 +
.../umzug/node_modules/lodash/index.js | 1 +
.../umzug/node_modules/lodash/indexOf.js | 42 +
.../umzug/node_modules/lodash/initial.js | 22 +
.../umzug/node_modules/lodash/intersection.js | 30 +
.../node_modules/lodash/intersectionBy.js | 45 +
.../node_modules/lodash/intersectionWith.js | 41 +
.../umzug/node_modules/lodash/invert.js | 27 +
.../umzug/node_modules/lodash/invertBy.js | 44 +
.../umzug/node_modules/lodash/invoke.js | 24 +
.../umzug/node_modules/lodash/invokeMap.js | 41 +
.../umzug/node_modules/lodash/isArguments.js | 36 +
.../umzug/node_modules/lodash/isArray.js | 26 +
.../node_modules/lodash/isArrayBuffer.js | 27 +
.../umzug/node_modules/lodash/isArrayLike.js | 33 +
.../node_modules/lodash/isArrayLikeObject.js | 33 +
.../umzug/node_modules/lodash/isBoolean.js | 29 +
.../umzug/node_modules/lodash/isBuffer.js | 38 +
.../umzug/node_modules/lodash/isDate.js | 27 +
.../umzug/node_modules/lodash/isElement.js | 25 +
.../umzug/node_modules/lodash/isEmpty.js | 77 +
.../umzug/node_modules/lodash/isEqual.js | 35 +
.../umzug/node_modules/lodash/isEqualWith.js | 41 +
.../umzug/node_modules/lodash/isError.js | 36 +
.../umzug/node_modules/lodash/isFinite.js | 36 +
.../umzug/node_modules/lodash/isFunction.js | 37 +
.../umzug/node_modules/lodash/isInteger.js | 33 +
.../umzug/node_modules/lodash/isLength.js | 35 +
.../umzug/node_modules/lodash/isMap.js | 27 +
.../umzug/node_modules/lodash/isMatch.js | 36 +
.../umzug/node_modules/lodash/isMatchWith.js | 41 +
.../umzug/node_modules/lodash/isNaN.js | 38 +
.../umzug/node_modules/lodash/isNative.js | 40 +
.../umzug/node_modules/lodash/isNil.js | 25 +
.../umzug/node_modules/lodash/isNull.js | 22 +
.../umzug/node_modules/lodash/isNumber.js | 38 +
.../umzug/node_modules/lodash/isObject.js | 31 +
.../umzug/node_modules/lodash/isObjectLike.js | 29 +
.../node_modules/lodash/isPlainObject.js | 62 +
.../umzug/node_modules/lodash/isRegExp.js | 27 +
.../node_modules/lodash/isSafeInteger.js | 37 +
.../umzug/node_modules/lodash/isSet.js | 27 +
.../umzug/node_modules/lodash/isString.js | 30 +
.../umzug/node_modules/lodash/isSymbol.js | 29 +
.../umzug/node_modules/lodash/isTypedArray.js | 27 +
.../umzug/node_modules/lodash/isUndefined.js | 22 +
.../umzug/node_modules/lodash/isWeakMap.js | 28 +
.../umzug/node_modules/lodash/isWeakSet.js | 28 +
.../umzug/node_modules/lodash/iteratee.js | 53 +
.../umzug/node_modules/lodash/join.js | 26 +
.../umzug/node_modules/lodash/kebabCase.js | 28 +
.../umzug/node_modules/lodash/keyBy.js | 36 +
.../umzug/node_modules/lodash/keys.js | 37 +
.../umzug/node_modules/lodash/keysIn.js | 32 +
.../umzug/node_modules/lodash/lang.js | 58 +
.../umzug/node_modules/lodash/last.js | 20 +
.../umzug/node_modules/lodash/lastIndexOf.js | 46 +
.../umzug/node_modules/lodash/lodash.js | 17084 ++
.../umzug/node_modules/lodash/lodash.min.js | 136 +
.../umzug/node_modules/lodash/lowerCase.js | 27 +
.../umzug/node_modules/lodash/lowerFirst.js | 22 +
node_modules/umzug/node_modules/lodash/lt.js | 29 +
node_modules/umzug/node_modules/lodash/lte.js | 30 +
node_modules/umzug/node_modules/lodash/map.js | 53 +
.../umzug/node_modules/lodash/mapKeys.js | 36 +
.../umzug/node_modules/lodash/mapValues.js | 43 +
.../umzug/node_modules/lodash/matches.js | 39 +
.../node_modules/lodash/matchesProperty.js | 37 +
.../umzug/node_modules/lodash/math.js | 17 +
node_modules/umzug/node_modules/lodash/max.js | 29 +
.../umzug/node_modules/lodash/maxBy.js | 34 +
.../umzug/node_modules/lodash/mean.js | 22 +
.../umzug/node_modules/lodash/meanBy.js | 31 +
.../umzug/node_modules/lodash/memoize.js | 73 +
.../umzug/node_modules/lodash/merge.js | 39 +
.../umzug/node_modules/lodash/mergeWith.js | 39 +
.../umzug/node_modules/lodash/method.js | 34 +
.../umzug/node_modules/lodash/methodOf.js | 33 +
node_modules/umzug/node_modules/lodash/min.js | 29 +
.../umzug/node_modules/lodash/minBy.js | 34 +
.../umzug/node_modules/lodash/mixin.js | 74 +
.../umzug/node_modules/lodash/multiply.js | 22 +
.../umzug/node_modules/lodash/negate.js | 40 +
.../umzug/node_modules/lodash/next.js | 35 +
.../umzug/node_modules/lodash/noop.js | 17 +
node_modules/umzug/node_modules/lodash/now.js | 23 +
node_modules/umzug/node_modules/lodash/nth.js | 29 +
.../umzug/node_modules/lodash/nthArg.js | 32 +
.../umzug/node_modules/lodash/number.js | 5 +
.../umzug/node_modules/lodash/object.js | 49 +
.../umzug/node_modules/lodash/omit.js | 57 +
.../umzug/node_modules/lodash/omitBy.js | 29 +
.../umzug/node_modules/lodash/once.js | 25 +
.../umzug/node_modules/lodash/orderBy.js | 47 +
.../umzug/node_modules/lodash/over.js | 24 +
.../umzug/node_modules/lodash/overArgs.js | 61 +
.../umzug/node_modules/lodash/overEvery.js | 30 +
.../umzug/node_modules/lodash/overSome.js | 30 +
.../umzug/node_modules/lodash/package.json | 106 +
node_modules/umzug/node_modules/lodash/pad.js | 49 +
.../umzug/node_modules/lodash/padEnd.js | 39 +
.../umzug/node_modules/lodash/padStart.js | 39 +
.../umzug/node_modules/lodash/parseInt.js | 43 +
.../umzug/node_modules/lodash/partial.js | 50 +
.../umzug/node_modules/lodash/partialRight.js | 49 +
.../umzug/node_modules/lodash/partition.js | 43 +
.../umzug/node_modules/lodash/pick.js | 25 +
.../umzug/node_modules/lodash/pickBy.js | 37 +
.../umzug/node_modules/lodash/plant.js | 48 +
.../umzug/node_modules/lodash/property.js | 32 +
.../umzug/node_modules/lodash/propertyOf.js | 30 +
.../umzug/node_modules/lodash/pull.js | 29 +
.../umzug/node_modules/lodash/pullAll.js | 29 +
.../umzug/node_modules/lodash/pullAllBy.js | 33 +
.../umzug/node_modules/lodash/pullAllWith.js | 32 +
.../umzug/node_modules/lodash/pullAt.js | 43 +
.../umzug/node_modules/lodash/random.js | 82 +
.../umzug/node_modules/lodash/range.js | 46 +
.../umzug/node_modules/lodash/rangeRight.js | 41 +
.../umzug/node_modules/lodash/rearg.js | 33 +
.../umzug/node_modules/lodash/reduce.js | 51 +
.../umzug/node_modules/lodash/reduceRight.js | 36 +
.../umzug/node_modules/lodash/reject.js | 46 +
.../umzug/node_modules/lodash/remove.js | 53 +
.../umzug/node_modules/lodash/repeat.js | 37 +
.../umzug/node_modules/lodash/replace.js | 29 +
.../umzug/node_modules/lodash/rest.js | 40 +
.../umzug/node_modules/lodash/result.js | 56 +
.../umzug/node_modules/lodash/reverse.js | 34 +
.../umzug/node_modules/lodash/round.js | 26 +
.../umzug/node_modules/lodash/sample.js | 24 +
.../umzug/node_modules/lodash/sampleSize.js | 37 +
node_modules/umzug/node_modules/lodash/seq.js | 16 +
node_modules/umzug/node_modules/lodash/set.js | 35 +
.../umzug/node_modules/lodash/setWith.js | 32 +
.../umzug/node_modules/lodash/shuffle.js | 25 +
.../umzug/node_modules/lodash/size.js | 46 +
.../umzug/node_modules/lodash/slice.js | 37 +
.../umzug/node_modules/lodash/snakeCase.js | 28 +
.../umzug/node_modules/lodash/some.js | 51 +
.../umzug/node_modules/lodash/sortBy.js | 48 +
.../umzug/node_modules/lodash/sortedIndex.js | 24 +
.../node_modules/lodash/sortedIndexBy.js | 33 +
.../node_modules/lodash/sortedIndexOf.js | 31 +
.../node_modules/lodash/sortedLastIndex.js | 25 +
.../node_modules/lodash/sortedLastIndexBy.js | 33 +
.../node_modules/lodash/sortedLastIndexOf.js | 31 +
.../umzug/node_modules/lodash/sortedUniq.js | 24 +
.../umzug/node_modules/lodash/sortedUniqBy.js | 26 +
.../umzug/node_modules/lodash/split.js | 52 +
.../umzug/node_modules/lodash/spread.js | 63 +
.../umzug/node_modules/lodash/startCase.js | 29 +
.../umzug/node_modules/lodash/startsWith.js | 39 +
.../umzug/node_modules/lodash/string.js | 33 +
.../umzug/node_modules/lodash/stubArray.js | 23 +
.../umzug/node_modules/lodash/stubFalse.js | 18 +
.../umzug/node_modules/lodash/stubObject.js | 23 +
.../umzug/node_modules/lodash/stubString.js | 18 +
.../umzug/node_modules/lodash/stubTrue.js | 18 +
.../umzug/node_modules/lodash/subtract.js | 22 +
node_modules/umzug/node_modules/lodash/sum.js | 24 +
.../umzug/node_modules/lodash/sumBy.js | 33 +
.../umzug/node_modules/lodash/tail.js | 22 +
.../umzug/node_modules/lodash/take.js | 37 +
.../umzug/node_modules/lodash/takeRight.js | 39 +
.../node_modules/lodash/takeRightWhile.js | 45 +
.../umzug/node_modules/lodash/takeWhile.js | 45 +
node_modules/umzug/node_modules/lodash/tap.js | 29 +
.../umzug/node_modules/lodash/template.js | 238 +
.../node_modules/lodash/templateSettings.js | 67 +
.../umzug/node_modules/lodash/throttle.js | 69 +
.../umzug/node_modules/lodash/thru.js | 28 +
.../umzug/node_modules/lodash/times.js | 51 +
.../umzug/node_modules/lodash/toArray.js | 58 +
.../umzug/node_modules/lodash/toFinite.js | 42 +
.../umzug/node_modules/lodash/toInteger.js | 36 +
.../umzug/node_modules/lodash/toIterator.js | 23 +
.../umzug/node_modules/lodash/toJSON.js | 1 +
.../umzug/node_modules/lodash/toLength.js | 38 +
.../umzug/node_modules/lodash/toLower.js | 28 +
.../umzug/node_modules/lodash/toNumber.js | 66 +
.../umzug/node_modules/lodash/toPairs.js | 30 +
.../umzug/node_modules/lodash/toPairsIn.js | 30 +
.../umzug/node_modules/lodash/toPath.js | 33 +
.../node_modules/lodash/toPlainObject.js | 32 +
.../node_modules/lodash/toSafeInteger.js | 37 +
.../umzug/node_modules/lodash/toString.js | 28 +
.../umzug/node_modules/lodash/toUpper.js | 28 +
.../umzug/node_modules/lodash/transform.js | 65 +
.../umzug/node_modules/lodash/trim.js | 49 +
.../umzug/node_modules/lodash/trimEnd.js | 43 +
.../umzug/node_modules/lodash/trimStart.js | 43 +
.../umzug/node_modules/lodash/truncate.js | 111 +
.../umzug/node_modules/lodash/unary.js | 22 +
.../umzug/node_modules/lodash/unescape.js | 34 +
.../umzug/node_modules/lodash/union.js | 26 +
.../umzug/node_modules/lodash/unionBy.js | 39 +
.../umzug/node_modules/lodash/unionWith.js | 34 +
.../umzug/node_modules/lodash/uniq.js | 25 +
.../umzug/node_modules/lodash/uniqBy.js | 31 +
.../umzug/node_modules/lodash/uniqWith.js | 28 +
.../umzug/node_modules/lodash/uniqueId.js | 28 +
.../umzug/node_modules/lodash/unset.js | 34 +
.../umzug/node_modules/lodash/unzip.js | 45 +
.../umzug/node_modules/lodash/unzipWith.js | 39 +
.../umzug/node_modules/lodash/update.js | 35 +
.../umzug/node_modules/lodash/updateWith.js | 33 +
.../umzug/node_modules/lodash/upperCase.js | 27 +
.../umzug/node_modules/lodash/upperFirst.js | 22 +
.../umzug/node_modules/lodash/util.js | 34 +
.../umzug/node_modules/lodash/value.js | 1 +
.../umzug/node_modules/lodash/valueOf.js | 1 +
.../umzug/node_modules/lodash/values.js | 34 +
.../umzug/node_modules/lodash/valuesIn.js | 32 +
.../umzug/node_modules/lodash/without.js | 31 +
.../umzug/node_modules/lodash/words.js | 35 +
.../umzug/node_modules/lodash/wrap.js | 30 +
.../umzug/node_modules/lodash/wrapperAt.js | 48 +
.../umzug/node_modules/lodash/wrapperChain.js | 34 +
.../node_modules/lodash/wrapperLodash.js | 147 +
.../node_modules/lodash/wrapperReverse.js | 44 +
.../umzug/node_modules/lodash/wrapperValue.js | 21 +
node_modules/umzug/node_modules/lodash/xor.js | 28 +
.../umzug/node_modules/lodash/xorBy.js | 39 +
.../umzug/node_modules/lodash/xorWith.js | 34 +
node_modules/umzug/node_modules/lodash/zip.js | 22 +
.../umzug/node_modules/lodash/zipObject.js | 24 +
.../node_modules/lodash/zipObjectDeep.js | 23 +
.../umzug/node_modules/lodash/zipWith.js | 32 +
node_modules/umzug/package.json | 105 +
node_modules/umzug/test/helper.js | 77 +
.../umzug/test/index/constructor.test.js | 42 +
node_modules/umzug/test/index/down.test.js | 363 +
node_modules/umzug/test/index/execute.test.js | 256 +
.../umzug/test/index/executed.test.js | 107 +
node_modules/umzug/test/index/index.js | 10 +
node_modules/umzug/test/index/pending.test.js | 99 +
node_modules/umzug/test/index/up.test.js | 314 +
node_modules/umzug/test/storages/index.js | 7 +
node_modules/umzug/test/storages/json.test.js | 110 +
node_modules/umzug/test/storages/none.test.js | 35 +
.../umzug/test/storages/sequelize.test.js | 441 +
node_modules/umzug/yarn.lock | 2237 +
node_modules/unc-path-regex/LICENSE | 21 +
node_modules/unc-path-regex/README.md | 88 +
node_modules/unc-path-regex/index.js | 5 +
node_modules/unc-path-regex/package.json | 124 +
node_modules/unique-stream/.npmignore | 3 +
node_modules/unique-stream/.travis.yml | 3 +
node_modules/unique-stream/LICENSE | 20 +
node_modules/unique-stream/README.md | 89 +
node_modules/unique-stream/index.js | 54 +
node_modules/unique-stream/package.json | 89 +
node_modules/unique-stream/test/index.js | 109 +
node_modules/unpipe/HISTORY.md | 4 +
node_modules/unpipe/LICENSE | 22 +
node_modules/unpipe/README.md | 43 +
node_modules/unpipe/index.js | 69 +
node_modules/unpipe/package.json | 94 +
node_modules/user-home/cli.js | 26 +
node_modules/user-home/index.js | 15 +
node_modules/user-home/license | 21 +
node_modules/user-home/package.json | 103 +
node_modules/user-home/readme.md | 42 +
node_modules/util-deprecate/History.md | 16 +
node_modules/util-deprecate/LICENSE | 24 +
node_modules/util-deprecate/README.md | 53 +
node_modules/util-deprecate/browser.js | 67 +
node_modules/util-deprecate/node.js | 6 +
node_modules/util-deprecate/package.json | 89 +
node_modules/utils-merge/.travis.yml | 6 +
node_modules/utils-merge/LICENSE | 20 +
node_modules/utils-merge/README.md | 34 +
node_modules/utils-merge/index.js | 23 +
node_modules/utils-merge/package.json | 93 +
node_modules/uuid/.npmignore | 8 +
node_modules/uuid/.travis.yml | 5 +
node_modules/uuid/AUTHORS | 5 +
node_modules/uuid/HISTORY.md | 28 +
node_modules/uuid/LICENSE.md | 21 +
node_modules/uuid/README.md | 132 +
node_modules/uuid/bin/uuid | 26 +
node_modules/uuid/index.js | 8 +
node_modules/uuid/lib/bytesToUuid.js | 23 +
node_modules/uuid/lib/rng-browser.js | 33 +
node_modules/uuid/lib/rng.js | 10 +
node_modules/uuid/package.json | 122 +
node_modules/uuid/test/mocha.opts | 3 +
node_modules/uuid/test/test.js | 96 +
node_modules/uuid/v1.js | 103 +
node_modules/uuid/v4.js | 29 +
node_modules/v8flags/.npmignore | 4 +
node_modules/v8flags/LICENSE | 22 +
node_modules/v8flags/README.md | 49 +
node_modules/v8flags/index.js | 133 +
node_modules/v8flags/package.json | 110 +
.../validate-npm-package-license/LICENSE | 174 +
.../validate-npm-package-license/README.md | 113 +
.../validate-npm-package-license/index.js | 84 +
.../validate-npm-package-license/package.json | 96 +
node_modules/validator/CHANGELOG.md | 242 +
node_modules/validator/LICENSE | 20 +
node_modules/validator/README.md | 174 +
node_modules/validator/index.js | 286 +
node_modules/validator/lib/alpha.js | 58 +
node_modules/validator/lib/blacklist.js | 18 +
node_modules/validator/lib/contains.js | 22 +
node_modules/validator/lib/equals.js | 18 +
node_modules/validator/lib/escape.js | 18 +
node_modules/validator/lib/isAfter.js | 26 +
node_modules/validator/lib/isAlpha.js | 25 +
node_modules/validator/lib/isAlphanumeric.js | 25 +
node_modules/validator/lib/isAscii.js | 22 +
node_modules/validator/lib/isBase64.js | 25 +
node_modules/validator/lib/isBefore.js | 26 +
node_modules/validator/lib/isBoolean.js | 18 +
node_modules/validator/lib/isByteLength.js | 33 +
node_modules/validator/lib/isCreditCard.js | 45 +
node_modules/validator/lib/isCurrency.js | 88 +
node_modules/validator/lib/isDataURI.js | 20 +
node_modules/validator/lib/isDate.js | 100 +
node_modules/validator/lib/isDecimal.js | 20 +
node_modules/validator/lib/isDivisibleBy.js | 22 +
node_modules/validator/lib/isEmail.js | 86 +
node_modules/validator/lib/isFQDN.js | 57 +
node_modules/validator/lib/isFloat.js | 24 +
node_modules/validator/lib/isFullWidth.js | 20 +
node_modules/validator/lib/isHalfWidth.js | 20 +
node_modules/validator/lib/isHexColor.js | 20 +
node_modules/validator/lib/isHexadecimal.js | 20 +
node_modules/validator/lib/isIP.js | 81 +
node_modules/validator/lib/isISBN.js | 57 +
node_modules/validator/lib/isISIN.js | 48 +
node_modules/validator/lib/isISO8601.js | 22 +
node_modules/validator/lib/isIn.js | 39 +
node_modules/validator/lib/isInt.js | 31 +
node_modules/validator/lib/isJSON.js | 25 +
node_modules/validator/lib/isLength.js | 34 +
node_modules/validator/lib/isLowercase.js | 18 +
node_modules/validator/lib/isMACAddress.js | 20 +
node_modules/validator/lib/isMD5.js | 20 +
node_modules/validator/lib/isMobilePhone.js | 64 +
node_modules/validator/lib/isMongoId.js | 22 +
node_modules/validator/lib/isMultibyte.js | 22 +
node_modules/validator/lib/isNull.js | 18 +
node_modules/validator/lib/isNumeric.js | 20 +
node_modules/validator/lib/isSurrogatePair.js | 20 +
node_modules/validator/lib/isURL.js | 142 +
node_modules/validator/lib/isUUID.js | 28 +
node_modules/validator/lib/isUppercase.js | 18 +
node_modules/validator/lib/isVariableWidth.js | 22 +
node_modules/validator/lib/isWhitelisted.js | 23 +
node_modules/validator/lib/ltrim.js | 19 +
node_modules/validator/lib/matches.js | 21 +
node_modules/validator/lib/normalizeEmail.js | 48 +
node_modules/validator/lib/rtrim.js | 25 +
node_modules/validator/lib/stripLow.js | 23 +
node_modules/validator/lib/toBoolean.js | 21 +
node_modules/validator/lib/toDate.js | 19 +
node_modules/validator/lib/toFloat.js | 18 +
node_modules/validator/lib/toInt.js | 18 +
node_modules/validator/lib/trim.js | 21 +
node_modules/validator/lib/unescape.js | 18 +
.../validator/lib/util/assertString.js | 12 +
node_modules/validator/lib/util/merge.js | 18 +
node_modules/validator/lib/util/toString.js | 22 +
node_modules/validator/lib/whitelist.js | 18 +
node_modules/validator/package.json | 129 +
node_modules/validator/validator.js | 1183 +
node_modules/validator/validator.min.js | 23 +
node_modules/vary/HISTORY.md | 34 +
node_modules/vary/LICENSE | 22 +
node_modules/vary/README.md | 101 +
node_modules/vary/index.js | 131 +
node_modules/vary/package.json | 109 +
node_modules/vinyl-fs/LICENSE | 20 +
node_modules/vinyl-fs/README.md | 93 +
node_modules/vinyl-fs/index.js | 7 +
node_modules/vinyl-fs/lib/dest/index.js | 61 +
.../vinyl-fs/lib/dest/writeContents/index.js | 59 +
.../lib/dest/writeContents/writeBuffer.js | 13 +
.../lib/dest/writeContents/writeDir.js | 9 +
.../lib/dest/writeContents/writeStream.js | 22 +
.../lib/src/getContents/bufferFile.js | 16 +
.../vinyl-fs/lib/src/getContents/index.js | 26 +
.../vinyl-fs/lib/src/getContents/readDir.js | 8 +
.../lib/src/getContents/streamFile.js | 13 +
node_modules/vinyl-fs/lib/src/getStats.js | 19 +
node_modules/vinyl-fs/lib/src/index.js | 61 +
.../vinyl-fs/node_modules/clone/.npmignore | 1 +
.../vinyl-fs/node_modules/clone/.travis.yml | 5 +
.../vinyl-fs/node_modules/clone/LICENSE | 18 +
.../vinyl-fs/node_modules/clone/README.md | 126 +
.../vinyl-fs/node_modules/clone/clone.js | 144 +
.../vinyl-fs/node_modules/clone/package.json | 159 +
.../vinyl-fs/node_modules/clone/test.js | 289 +
.../node_modules/graceful-fs/.npmignore | 3 +
.../node_modules/graceful-fs/.travis.yml | 7 +
.../vinyl-fs/node_modules/graceful-fs/LICENSE | 15 +
.../node_modules/graceful-fs/README.md | 36 +
.../vinyl-fs/node_modules/graceful-fs/fs.js | 1 +
.../node_modules/graceful-fs/graceful-fs.js | 158 +
.../node_modules/graceful-fs/package.json | 112 +
.../node_modules/graceful-fs/polyfills.js | 255 +
.../node_modules/graceful-fs/test/max-open.js | 69 +
.../node_modules/graceful-fs/test/open.js | 39 +
.../graceful-fs/test/readdir-sort.js | 20 +
.../graceful-fs/test/write-then-read.js | 47 +
.../vinyl-fs/node_modules/isarray/README.md | 54 +
.../node_modules/isarray/build/build.js | 209 +
.../node_modules/isarray/component.json | 19 +
.../vinyl-fs/node_modules/isarray/index.js | 3 +
.../node_modules/isarray/package.json | 86 +
.../node_modules/readable-stream/.npmignore | 5 +
.../node_modules/readable-stream/LICENSE | 18 +
.../node_modules/readable-stream/README.md | 15 +
.../node_modules/readable-stream/duplex.js | 1 +
.../readable-stream/lib/_stream_duplex.js | 89 +
.../lib/_stream_passthrough.js | 46 +
.../readable-stream/lib/_stream_readable.js | 982 +
.../readable-stream/lib/_stream_transform.js | 210 +
.../readable-stream/lib/_stream_writable.js | 386 +
.../node_modules/readable-stream/package.json | 112 +
.../readable-stream/passthrough.js | 1 +
.../node_modules/readable-stream/readable.js | 11 +
.../node_modules/readable-stream/transform.js | 1 +
.../node_modules/readable-stream/writable.js | 1 +
.../vinyl-fs/node_modules/through2/.npmignore | 3 +
.../vinyl-fs/node_modules/through2/LICENSE | 39 +
.../vinyl-fs/node_modules/through2/README.md | 132 +
.../node_modules/through2/package.json | 98 +
.../node_modules/through2/through2.js | 96 +
.../vinyl-fs/node_modules/vinyl/LICENSE | 20 +
.../vinyl-fs/node_modules/vinyl/README.md | 127 +
.../vinyl-fs/node_modules/vinyl/index.js | 175 +
.../node_modules/vinyl/lib/cloneBuffer.js | 7 +
.../node_modules/vinyl/lib/inspectStream.js | 11 +
.../node_modules/vinyl/lib/isBuffer.js | 7 +
.../vinyl-fs/node_modules/vinyl/lib/isNull.js | 3 +
.../node_modules/vinyl/lib/isStream.js | 5 +
.../vinyl-fs/node_modules/vinyl/package.json | 108 +
node_modules/vinyl-fs/package.json | 124 +
node_modules/vinyl/LICENSE | 20 +
node_modules/vinyl/README.md | 195 +
node_modules/vinyl/index.js | 213 +
node_modules/vinyl/lib/cloneBuffer.js | 7 +
node_modules/vinyl/lib/inspectStream.js | 11 +
node_modules/vinyl/lib/isBuffer.js | 1 +
node_modules/vinyl/lib/isNull.js | 3 +
node_modules/vinyl/lib/isStream.js | 5 +
node_modules/vinyl/package.json | 107 +
node_modules/void-elements/.gitattributes | 1 +
node_modules/void-elements/.npmignore | 1 +
node_modules/void-elements/.travis.yml | 4 +
node_modules/void-elements/LICENSE | 22 +
node_modules/void-elements/README.md | 27 +
node_modules/void-elements/index.js | 23 +
node_modules/void-elements/package.json | 92 +
node_modules/void-elements/pre-publish.js | 29 +
node_modules/void-elements/test/index.js | 5 +
node_modules/which-module/CHANGELOG.md | 11 +
node_modules/which-module/LICENSE | 13 +
node_modules/which-module/README.md | 55 +
node_modules/which-module/index.js | 9 +
node_modules/which-module/package.json | 104 +
node_modules/which/CHANGELOG.md | 142 +
node_modules/which/LICENSE | 15 +
node_modules/which/README.md | 48 +
node_modules/which/bin/which | 52 +
node_modules/which/package.json | 101 +
node_modules/which/which.js | 132 +
node_modules/window-size/LICENSE-MIT | 22 +
node_modules/window-size/README.md | 26 +
node_modules/window-size/index.js | 33 +
node_modules/window-size/package.json | 89 +
node_modules/with/.npmignore | 2 +
node_modules/with/LICENSE | 19 +
node_modules/with/README.md | 81 +
node_modules/with/index.js | 125 +
node_modules/with/node_modules/.bin/acorn | 1 +
.../with/node_modules/acorn/.editorconfig | 7 +
.../with/node_modules/acorn/.gitattributes | 1 +
.../with/node_modules/acorn/.npmignore | 3 +
.../with/node_modules/acorn/.tern-project | 1 +
.../with/node_modules/acorn/.travis.yml | 2 +
node_modules/with/node_modules/acorn/AUTHORS | 38 +
node_modules/with/node_modules/acorn/LICENSE | 19 +
.../with/node_modules/acorn/README.md | 377 +
.../with/node_modules/acorn/bin/acorn | 54 +
.../node_modules/acorn/bin/build-acorn.js | 51 +
.../acorn/bin/generate-identifier-regex.js | 47 +
.../with/node_modules/acorn/bin/prepublish.sh | 2 +
.../node_modules/acorn/bin/update_authors.sh | 6 +
.../with/node_modules/acorn/bin/without_eval | 48 +
.../with/node_modules/acorn/dist/.keep | 0
.../with/node_modules/acorn/dist/acorn.js | 4014 +
.../with/node_modules/acorn/dist/acorn_csp.js | 3985 +
.../node_modules/acorn/dist/acorn_loose.js | 1298 +
.../with/node_modules/acorn/dist/walk.js | 342 +
.../with/node_modules/acorn/package.json | 200 +
.../with/node_modules/acorn/src/expression.js | 697 +
.../with/node_modules/acorn/src/identifier.js | 129 +
.../with/node_modules/acorn/src/index.js | 75 +
.../with/node_modules/acorn/src/location.js | 68 +
.../acorn/src/loose/acorn_loose.js | 0
.../acorn/src/loose/expression.js | 511 +
.../node_modules/acorn/src/loose/index.js | 50 +
.../node_modules/acorn/src/loose/parseutil.js | 126 +
.../node_modules/acorn/src/loose/state.js | 17 +
.../node_modules/acorn/src/loose/statement.js | 419 +
.../node_modules/acorn/src/loose/tokenize.js | 108 +
.../with/node_modules/acorn/src/lval.js | 213 +
.../with/node_modules/acorn/src/node.js | 70 +
.../with/node_modules/acorn/src/options.js | 119 +
.../with/node_modules/acorn/src/parseutil.js | 89 +
.../with/node_modules/acorn/src/state.js | 78 +
.../with/node_modules/acorn/src/statement.js | 594 +
.../node_modules/acorn/src/tokencontext.js | 107 +
.../with/node_modules/acorn/src/tokenize.js | 672 +
.../with/node_modules/acorn/src/tokentype.js | 142 +
.../with/node_modules/acorn/src/util.js | 9 +
.../with/node_modules/acorn/src/walk/index.js | 291 +
.../with/node_modules/acorn/src/whitespace.js | 12 +
node_modules/with/package.json | 85 +
node_modules/wkx/.editorconfig | 12 +
node_modules/wkx/.jshintignore | 3 +
node_modules/wkx/.jshintrc | 12 +
node_modules/wkx/.npmignore | 2 +
node_modules/wkx/.travis.yml | 9 +
node_modules/wkx/LICENSE.txt | 20 +
node_modules/wkx/README.md | 92 +
node_modules/wkx/bower.json | 30 +
node_modules/wkx/build/update-testdata.js | 40 +
node_modules/wkx/dist/wkx.js | 4638 +
node_modules/wkx/dist/wkx.min.js | 2 +
node_modules/wkx/lib/binaryreader.js | 47 +
node_modules/wkx/lib/binarywriter.js | 65 +
node_modules/wkx/lib/geometry.js | 378 +
node_modules/wkx/lib/geometrycollection.js | 163 +
node_modules/wkx/lib/linestring.js | 178 +
node_modules/wkx/lib/multilinestring.js | 184 +
node_modules/wkx/lib/multipoint.js | 167 +
node_modules/wkx/lib/multipolygon.js | 221 +
node_modules/wkx/lib/point.js | 214 +
node_modules/wkx/lib/polygon.js | 288 +
node_modules/wkx/lib/types.js | 29 +
node_modules/wkx/lib/wktparser.js | 124 +
node_modules/wkx/lib/wkx.js | 9 +
node_modules/wkx/lib/zigzag.js | 8 +
node_modules/wkx/package.json | 103 +
node_modules/wkx/test/binaryreader.js | 12 +
node_modules/wkx/test/binarywriter.js | 44 +
node_modules/wkx/test/geojson.js | 102 +
node_modules/wkx/test/testdata.json | 268 +
node_modules/wkx/test/testdataM.json | 289 +
node_modules/wkx/test/testdataZ.json | 278 +
node_modules/wkx/test/testdataZM.json | 292 +
node_modules/wkx/test/twkb.js | 37 +
node_modules/wkx/test/wkx.js | 202 +
node_modules/wkx/test/zigzag.js | 20 +
node_modules/wordwrap/LICENSE | 18 +
node_modules/wordwrap/README.markdown | 70 +
node_modules/wordwrap/example/center.js | 10 +
node_modules/wordwrap/example/meat.js | 3 +
node_modules/wordwrap/index.js | 76 +
node_modules/wordwrap/package.json | 97 +
node_modules/wordwrap/test/break.js | 30 +
node_modules/wordwrap/test/idleness.txt | 63 +
node_modules/wordwrap/test/wrap.js | 31 +
node_modules/wrap-ansi/index.js | 168 +
node_modules/wrap-ansi/license | 21 +
node_modules/wrap-ansi/package.json | 141 +
node_modules/wrap-ansi/readme.md | 73 +
node_modules/wrappy/LICENSE | 15 +
node_modules/wrappy/README.md | 36 +
node_modules/wrappy/package.json | 97 +
node_modules/wrappy/wrappy.js | 33 +
node_modules/xtend/.jshintrc | 30 +
node_modules/xtend/.npmignore | 1 +
node_modules/xtend/LICENCE | 19 +
node_modules/xtend/Makefile | 4 +
node_modules/xtend/README.md | 32 +
node_modules/xtend/immutable.js | 19 +
node_modules/xtend/mutable.js | 17 +
node_modules/xtend/package.json | 120 +
node_modules/xtend/test.js | 83 +
node_modules/y18n/LICENSE | 13 +
node_modules/y18n/README.md | 91 +
node_modules/y18n/index.js | 172 +
node_modules/y18n/package.json | 105 +
node_modules/yallist/LICENSE | 15 +
node_modules/yallist/README.md | 204 +
node_modules/yallist/iterator.js | 7 +
node_modules/yallist/package.json | 96 +
node_modules/yallist/yallist.js | 370 +
node_modules/yargs-parser/CHANGELOG.md | 169 +
node_modules/yargs-parser/LICENSE.txt | 14 +
node_modules/yargs-parser/README.md | 257 +
node_modules/yargs-parser/index.js | 759 +
.../yargs-parser/lib/tokenize-arg-string.js | 34 +
.../node_modules/camelcase/index.js | 56 +
.../node_modules/camelcase/license | 21 +
.../node_modules/camelcase/package.json | 119 +
.../node_modules/camelcase/readme.md | 57 +
node_modules/yargs-parser/package.json | 114 +
node_modules/yargs/CHANGELOG.md | 374 +
node_modules/yargs/LICENSE | 21 +
node_modules/yargs/README.md | 926 +
node_modules/yargs/completion.sh.hbs | 22 +
node_modules/yargs/index.js | 504 +
node_modules/yargs/lib/completion.js | 71 +
node_modules/yargs/lib/parser.js | 448 +
node_modules/yargs/lib/usage.js | 314 +
node_modules/yargs/lib/validation.js | 196 +
node_modules/yargs/package.json | 153 +
package.json | 17 +
public/stylesheets/style.css | 8 +
routes/index.js | 9 +
routes/users.js | 16 +
seeders/20170425042049-seed_data_contact.js | 22 +
views/error.jade | 6 +
views/index.jade | 5 +
views/layout.jade | 7 +
7786 files changed, 806617 insertions(+), 1 deletion(-)
create mode 100644 .gitignore
create mode 100644 app.js
create mode 100755 bin/www
create mode 100644 config/config.json
create mode 100644 controllers/user.js
create mode 100644 migrations/20170425040805-create-contact.js
create mode 100644 models/contact.js
create mode 100644 models/index.js
create mode 120000 node_modules/.bin/acorn
create mode 120000 node_modules/.bin/cleancss
create mode 120000 node_modules/.bin/cross-env
create mode 120000 node_modules/.bin/css-beautify
create mode 120000 node_modules/.bin/editorconfig
create mode 120000 node_modules/.bin/gulp
create mode 120000 node_modules/.bin/html-beautify
create mode 120000 node_modules/.bin/jade
create mode 120000 node_modules/.bin/js-beautify
create mode 120000 node_modules/.bin/mime
create mode 120000 node_modules/.bin/mkdirp
create mode 120000 node_modules/.bin/nopt
create mode 120000 node_modules/.bin/semver
create mode 120000 node_modules/.bin/sequelize
create mode 120000 node_modules/.bin/strip-bom
create mode 120000 node_modules/.bin/uglifyjs
create mode 120000 node_modules/.bin/user-home
create mode 120000 node_modules/.bin/uuid
create mode 120000 node_modules/.bin/which
create mode 100644 node_modules/@types/geojson/LICENSE
create mode 100644 node_modules/@types/geojson/README.md
create mode 100644 node_modules/@types/geojson/index.d.ts
create mode 100644 node_modules/@types/geojson/package.json
create mode 100644 node_modules/abbrev/LICENSE
create mode 100644 node_modules/abbrev/README.md
create mode 100644 node_modules/abbrev/abbrev.js
create mode 100644 node_modules/abbrev/package.json
create mode 100644 node_modules/accepts/HISTORY.md
create mode 100644 node_modules/accepts/LICENSE
create mode 100644 node_modules/accepts/README.md
create mode 100644 node_modules/accepts/index.js
create mode 100644 node_modules/accepts/package.json
create mode 100644 node_modules/acorn-globals/LICENSE
create mode 100644 node_modules/acorn-globals/README.md
create mode 100644 node_modules/acorn-globals/index.js
create mode 100644 node_modules/acorn-globals/package.json
create mode 100644 node_modules/acorn/.editorconfig
create mode 100644 node_modules/acorn/.gitattributes
create mode 100644 node_modules/acorn/.npmignore
create mode 100644 node_modules/acorn/.tern-project
create mode 100644 node_modules/acorn/.travis.yml
create mode 100644 node_modules/acorn/AUTHORS
create mode 100644 node_modules/acorn/LICENSE
create mode 100644 node_modules/acorn/README.md
create mode 100755 node_modules/acorn/bin/acorn
create mode 100644 node_modules/acorn/bin/build-acorn.js
create mode 100644 node_modules/acorn/bin/generate-identifier-regex.js
create mode 100755 node_modules/acorn/bin/update_authors.sh
create mode 100644 node_modules/acorn/dist/.keep
create mode 100644 node_modules/acorn/dist/acorn.js
create mode 100644 node_modules/acorn/dist/acorn_loose.js
create mode 100644 node_modules/acorn/dist/walk.js
create mode 100644 node_modules/acorn/package.json
create mode 100644 node_modules/acorn/src/bin/acorn.js
create mode 100644 node_modules/acorn/src/expression.js
create mode 100644 node_modules/acorn/src/identifier.js
create mode 100644 node_modules/acorn/src/index.js
create mode 100644 node_modules/acorn/src/location.js
create mode 100644 node_modules/acorn/src/locutil.js
create mode 100644 node_modules/acorn/src/loose/acorn_loose.js
create mode 100644 node_modules/acorn/src/loose/expression.js
create mode 100644 node_modules/acorn/src/loose/index.js
create mode 100644 node_modules/acorn/src/loose/parseutil.js
create mode 100644 node_modules/acorn/src/loose/state.js
create mode 100644 node_modules/acorn/src/loose/statement.js
create mode 100644 node_modules/acorn/src/loose/tokenize.js
create mode 100644 node_modules/acorn/src/lval.js
create mode 100644 node_modules/acorn/src/node.js
create mode 100644 node_modules/acorn/src/options.js
create mode 100644 node_modules/acorn/src/parseutil.js
create mode 100644 node_modules/acorn/src/state.js
create mode 100644 node_modules/acorn/src/statement.js
create mode 100644 node_modules/acorn/src/tokencontext.js
create mode 100644 node_modules/acorn/src/tokenize.js
create mode 100644 node_modules/acorn/src/tokentype.js
create mode 100644 node_modules/acorn/src/util.js
create mode 100644 node_modules/acorn/src/walk/index.js
create mode 100644 node_modules/acorn/src/whitespace.js
create mode 100644 node_modules/align-text/LICENSE
create mode 100644 node_modules/align-text/README.md
create mode 100644 node_modules/align-text/index.js
create mode 100644 node_modules/align-text/package.json
create mode 100644 node_modules/amdefine/LICENSE
create mode 100644 node_modules/amdefine/README.md
create mode 100644 node_modules/amdefine/amdefine.js
create mode 100644 node_modules/amdefine/intercept.js
create mode 100644 node_modules/amdefine/package.json
create mode 100644 node_modules/ansi-regex/index.js
create mode 100644 node_modules/ansi-regex/license
create mode 100644 node_modules/ansi-regex/package.json
create mode 100644 node_modules/ansi-regex/readme.md
create mode 100644 node_modules/ansi-styles/index.js
create mode 100644 node_modules/ansi-styles/license
create mode 100644 node_modules/ansi-styles/package.json
create mode 100644 node_modules/ansi-styles/readme.md
create mode 100644 node_modules/ap/README.markdown
create mode 100644 node_modules/ap/examples/z.js
create mode 100644 node_modules/ap/index.js
create mode 100644 node_modules/ap/package.json
create mode 100644 node_modules/ap/test/curry.js
create mode 100644 node_modules/archy/.travis.yml
create mode 100644 node_modules/archy/LICENSE
create mode 100644 node_modules/archy/examples/beep.js
create mode 100644 node_modules/archy/examples/multi_line.js
create mode 100644 node_modules/archy/index.js
create mode 100644 node_modules/archy/package.json
create mode 100644 node_modules/archy/readme.markdown
create mode 100644 node_modules/archy/test/beep.js
create mode 100644 node_modules/archy/test/multi_line.js
create mode 100644 node_modules/archy/test/non_unicode.js
create mode 100755 node_modules/arr-diff/LICENSE
create mode 100644 node_modules/arr-diff/README.md
create mode 100644 node_modules/arr-diff/index.js
create mode 100644 node_modules/arr-diff/package.json
create mode 100755 node_modules/arr-flatten/LICENSE
create mode 100755 node_modules/arr-flatten/README.md
create mode 100644 node_modules/arr-flatten/index.js
create mode 100644 node_modules/arr-flatten/package.json
create mode 100644 node_modules/array-differ/index.js
create mode 100644 node_modules/array-differ/package.json
create mode 100644 node_modules/array-differ/readme.md
create mode 100644 node_modules/array-flatten/LICENSE
create mode 100644 node_modules/array-flatten/README.md
create mode 100644 node_modules/array-flatten/array-flatten.js
create mode 100644 node_modules/array-flatten/package.json
create mode 100644 node_modules/array-uniq/index.js
create mode 100644 node_modules/array-uniq/license
create mode 100644 node_modules/array-uniq/package.json
create mode 100644 node_modules/array-uniq/readme.md
create mode 100755 node_modules/array-unique/LICENSE
create mode 100755 node_modules/array-unique/README.md
create mode 100755 node_modules/array-unique/index.js
create mode 100755 node_modules/array-unique/package.json
create mode 100644 node_modules/asap/LICENSE.md
create mode 100644 node_modules/asap/README.md
create mode 100644 node_modules/asap/asap.js
create mode 100644 node_modules/asap/package.json
create mode 100644 node_modules/balanced-match/.npmignore
create mode 100644 node_modules/balanced-match/LICENSE.md
create mode 100644 node_modules/balanced-match/README.md
create mode 100644 node_modules/balanced-match/index.js
create mode 100644 node_modules/balanced-match/package.json
create mode 100644 node_modules/basic-auth/HISTORY.md
create mode 100644 node_modules/basic-auth/LICENSE
create mode 100644 node_modules/basic-auth/README.md
create mode 100644 node_modules/basic-auth/index.js
create mode 100644 node_modules/basic-auth/package.json
create mode 100644 node_modules/beeper/index.js
create mode 100644 node_modules/beeper/license
create mode 100644 node_modules/beeper/package.json
create mode 100644 node_modules/beeper/readme.md
create mode 100644 node_modules/bluebird/LICENSE
create mode 100644 node_modules/bluebird/README.md
create mode 100644 node_modules/bluebird/changelog.md
create mode 100644 node_modules/bluebird/js/browser/bluebird.core.js
create mode 100644 node_modules/bluebird/js/browser/bluebird.core.min.js
create mode 100644 node_modules/bluebird/js/browser/bluebird.js
create mode 100644 node_modules/bluebird/js/browser/bluebird.min.js
create mode 100644 node_modules/bluebird/js/release/any.js
create mode 100644 node_modules/bluebird/js/release/assert.js
create mode 100644 node_modules/bluebird/js/release/async.js
create mode 100644 node_modules/bluebird/js/release/bind.js
create mode 100644 node_modules/bluebird/js/release/bluebird.js
create mode 100644 node_modules/bluebird/js/release/call_get.js
create mode 100644 node_modules/bluebird/js/release/cancel.js
create mode 100644 node_modules/bluebird/js/release/catch_filter.js
create mode 100644 node_modules/bluebird/js/release/context.js
create mode 100644 node_modules/bluebird/js/release/debuggability.js
create mode 100644 node_modules/bluebird/js/release/direct_resolve.js
create mode 100644 node_modules/bluebird/js/release/each.js
create mode 100644 node_modules/bluebird/js/release/errors.js
create mode 100644 node_modules/bluebird/js/release/es5.js
create mode 100644 node_modules/bluebird/js/release/filter.js
create mode 100644 node_modules/bluebird/js/release/finally.js
create mode 100644 node_modules/bluebird/js/release/generators.js
create mode 100644 node_modules/bluebird/js/release/join.js
create mode 100644 node_modules/bluebird/js/release/map.js
create mode 100644 node_modules/bluebird/js/release/method.js
create mode 100644 node_modules/bluebird/js/release/nodeback.js
create mode 100644 node_modules/bluebird/js/release/nodeify.js
create mode 100644 node_modules/bluebird/js/release/promise.js
create mode 100644 node_modules/bluebird/js/release/promise_array.js
create mode 100644 node_modules/bluebird/js/release/promisify.js
create mode 100644 node_modules/bluebird/js/release/props.js
create mode 100644 node_modules/bluebird/js/release/queue.js
create mode 100644 node_modules/bluebird/js/release/race.js
create mode 100644 node_modules/bluebird/js/release/reduce.js
create mode 100644 node_modules/bluebird/js/release/schedule.js
create mode 100644 node_modules/bluebird/js/release/settle.js
create mode 100644 node_modules/bluebird/js/release/some.js
create mode 100644 node_modules/bluebird/js/release/synchronous_inspection.js
create mode 100644 node_modules/bluebird/js/release/thenables.js
create mode 100644 node_modules/bluebird/js/release/timers.js
create mode 100644 node_modules/bluebird/js/release/using.js
create mode 100644 node_modules/bluebird/js/release/util.js
create mode 100644 node_modules/bluebird/package.json
create mode 100644 node_modules/body-parser/HISTORY.md
create mode 100644 node_modules/body-parser/LICENSE
create mode 100644 node_modules/body-parser/README.md
create mode 100644 node_modules/body-parser/index.js
create mode 100644 node_modules/body-parser/lib/read.js
create mode 100644 node_modules/body-parser/lib/types/json.js
create mode 100644 node_modules/body-parser/lib/types/raw.js
create mode 100644 node_modules/body-parser/lib/types/text.js
create mode 100644 node_modules/body-parser/lib/types/urlencoded.js
create mode 100644 node_modules/body-parser/node_modules/debug/.coveralls.yml
create mode 100644 node_modules/body-parser/node_modules/debug/.eslintrc
create mode 100644 node_modules/body-parser/node_modules/debug/.npmignore
create mode 100644 node_modules/body-parser/node_modules/debug/.travis.yml
create mode 100644 node_modules/body-parser/node_modules/debug/CHANGELOG.md
create mode 100644 node_modules/body-parser/node_modules/debug/LICENSE
create mode 100644 node_modules/body-parser/node_modules/debug/Makefile
create mode 100644 node_modules/body-parser/node_modules/debug/README.md
create mode 100644 node_modules/body-parser/node_modules/debug/bower.json
create mode 100644 node_modules/body-parser/node_modules/debug/component.json
create mode 100644 node_modules/body-parser/node_modules/debug/karma.conf.js
create mode 100644 node_modules/body-parser/node_modules/debug/node.js
create mode 100644 node_modules/body-parser/node_modules/debug/package.json
create mode 100644 node_modules/body-parser/node_modules/debug/src/browser.js
create mode 100644 node_modules/body-parser/node_modules/debug/src/debug.js
create mode 100644 node_modules/body-parser/node_modules/debug/src/index.js
create mode 100644 node_modules/body-parser/node_modules/debug/src/node.js
create mode 100644 node_modules/body-parser/package.json
create mode 100644 node_modules/brace-expansion/README.md
create mode 100644 node_modules/brace-expansion/index.js
create mode 100644 node_modules/brace-expansion/package.json
create mode 100644 node_modules/braces/LICENSE
create mode 100644 node_modules/braces/README.md
create mode 100644 node_modules/braces/index.js
create mode 100644 node_modules/braces/package.json
create mode 100644 node_modules/buffer-shims/index.js
create mode 100644 node_modules/buffer-shims/license.md
create mode 100644 node_modules/buffer-shims/package.json
create mode 100644 node_modules/buffer-shims/readme.md
create mode 100644 node_modules/buffer-writer/.npmignore
create mode 100644 node_modules/buffer-writer/.travis.yml
create mode 100644 node_modules/buffer-writer/LICENSE
create mode 100644 node_modules/buffer-writer/README.md
create mode 100644 node_modules/buffer-writer/benchmark/index.js
create mode 100644 node_modules/buffer-writer/benchmark/int-16-benchmark.js
create mode 100644 node_modules/buffer-writer/benchmark/int-32-benchmark.js
create mode 100644 node_modules/buffer-writer/benchmark/join-benchmark.js
create mode 100644 node_modules/buffer-writer/benchmark/resize-benchmark.js
create mode 100644 node_modules/buffer-writer/benchmark/small-benchmark.js
create mode 100644 node_modules/buffer-writer/index.js
create mode 100644 node_modules/buffer-writer/package.json
create mode 100644 node_modules/buffer-writer/test/mocha.opts
create mode 100644 node_modules/buffer-writer/test/writer-tests.js
create mode 100644 node_modules/builtin-modules/builtin-modules.json
create mode 100644 node_modules/builtin-modules/index.js
create mode 100644 node_modules/builtin-modules/license
create mode 100644 node_modules/builtin-modules/package.json
create mode 100644 node_modules/builtin-modules/readme.md
create mode 100644 node_modules/builtin-modules/static.js
create mode 100644 node_modules/bytes/History.md
create mode 100644 node_modules/bytes/LICENSE
create mode 100644 node_modules/bytes/Readme.md
create mode 100644 node_modules/bytes/index.js
create mode 100644 node_modules/bytes/package.json
create mode 100644 node_modules/camelcase/index.js
create mode 100644 node_modules/camelcase/license
create mode 100644 node_modules/camelcase/package.json
create mode 100644 node_modules/camelcase/readme.md
create mode 100644 node_modules/center-align/LICENSE
create mode 100644 node_modules/center-align/README.md
create mode 100644 node_modules/center-align/index.js
create mode 100644 node_modules/center-align/package.json
create mode 100644 node_modules/center-align/utils.js
create mode 100644 node_modules/chalk/index.js
create mode 100644 node_modules/chalk/license
create mode 100644 node_modules/chalk/package.json
create mode 100644 node_modules/chalk/readme.md
create mode 100644 node_modules/character-parser/.npmignore
create mode 100644 node_modules/character-parser/LICENSE
create mode 100644 node_modules/character-parser/README.md
create mode 100644 node_modules/character-parser/index.js
create mode 100644 node_modules/character-parser/package.json
create mode 100644 node_modules/clean-css/History.md
create mode 100644 node_modules/clean-css/LICENSE
create mode 100644 node_modules/clean-css/README.md
create mode 100755 node_modules/clean-css/bin/cleancss
create mode 100644 node_modules/clean-css/index.js
create mode 100644 node_modules/clean-css/lib/clean.js
create mode 100644 node_modules/clean-css/lib/colors/hex-name-shortener.js
create mode 100644 node_modules/clean-css/lib/colors/hsl.js
create mode 100644 node_modules/clean-css/lib/colors/rgb.js
create mode 100644 node_modules/clean-css/lib/imports/inliner.js
create mode 100644 node_modules/clean-css/lib/properties/break-up.js
create mode 100644 node_modules/clean-css/lib/properties/can-override.js
create mode 100644 node_modules/clean-css/lib/properties/clone.js
create mode 100644 node_modules/clean-css/lib/properties/compactable.js
create mode 100644 node_modules/clean-css/lib/properties/every-combination.js
create mode 100644 node_modules/clean-css/lib/properties/has-inherit.js
create mode 100644 node_modules/clean-css/lib/properties/invalid-property-error.js
create mode 100644 node_modules/clean-css/lib/properties/optimizer.js
create mode 100644 node_modules/clean-css/lib/properties/override-compactor.js
create mode 100644 node_modules/clean-css/lib/properties/populate-components.js
create mode 100644 node_modules/clean-css/lib/properties/remove-unused.js
create mode 100644 node_modules/clean-css/lib/properties/restore-from-optimizing.js
create mode 100644 node_modules/clean-css/lib/properties/restore.js
create mode 100644 node_modules/clean-css/lib/properties/shorthand-compactor.js
create mode 100644 node_modules/clean-css/lib/properties/validator.js
create mode 100644 node_modules/clean-css/lib/properties/vendor-prefixes.js
create mode 100644 node_modules/clean-css/lib/properties/wrap-for-optimizing.js
create mode 100644 node_modules/clean-css/lib/selectors/advanced.js
create mode 100644 node_modules/clean-css/lib/selectors/clean-up.js
create mode 100644 node_modules/clean-css/lib/selectors/extractor.js
create mode 100644 node_modules/clean-css/lib/selectors/is-special.js
create mode 100644 node_modules/clean-css/lib/selectors/merge-adjacent.js
create mode 100644 node_modules/clean-css/lib/selectors/merge-media-queries.js
create mode 100644 node_modules/clean-css/lib/selectors/merge-non-adjacent-by-body.js
create mode 100644 node_modules/clean-css/lib/selectors/merge-non-adjacent-by-selector.js
create mode 100644 node_modules/clean-css/lib/selectors/reduce-non-adjacent.js
create mode 100644 node_modules/clean-css/lib/selectors/remove-duplicate-media-queries.js
create mode 100644 node_modules/clean-css/lib/selectors/remove-duplicates.js
create mode 100644 node_modules/clean-css/lib/selectors/reorderable.js
create mode 100644 node_modules/clean-css/lib/selectors/restructure.js
create mode 100644 node_modules/clean-css/lib/selectors/simple.js
create mode 100644 node_modules/clean-css/lib/source-maps/track.js
create mode 100644 node_modules/clean-css/lib/stringifier/helpers.js
create mode 100644 node_modules/clean-css/lib/stringifier/one-time.js
create mode 100644 node_modules/clean-css/lib/stringifier/simple.js
create mode 100644 node_modules/clean-css/lib/stringifier/source-maps.js
create mode 100644 node_modules/clean-css/lib/text/comments-processor.js
create mode 100644 node_modules/clean-css/lib/text/escape-store.js
create mode 100644 node_modules/clean-css/lib/text/expressions-processor.js
create mode 100644 node_modules/clean-css/lib/text/free-text-processor.js
create mode 100644 node_modules/clean-css/lib/text/urls-processor.js
create mode 100644 node_modules/clean-css/lib/tokenizer/extract-properties.js
create mode 100644 node_modules/clean-css/lib/tokenizer/extract-selectors.js
create mode 100644 node_modules/clean-css/lib/tokenizer/tokenize.js
create mode 100644 node_modules/clean-css/lib/urls/rebase.js
create mode 100644 node_modules/clean-css/lib/urls/reduce.js
create mode 100644 node_modules/clean-css/lib/urls/rewrite.js
create mode 100644 node_modules/clean-css/lib/utils/clone-array.js
create mode 100644 node_modules/clean-css/lib/utils/compatibility.js
create mode 100644 node_modules/clean-css/lib/utils/input-source-map-tracker.js
create mode 100644 node_modules/clean-css/lib/utils/object.js
create mode 100644 node_modules/clean-css/lib/utils/quote-scanner.js
create mode 100644 node_modules/clean-css/lib/utils/source-reader.js
create mode 100644 node_modules/clean-css/lib/utils/source-tracker.js
create mode 100644 node_modules/clean-css/lib/utils/split.js
create mode 100644 node_modules/clean-css/node_modules/commander/History.md
create mode 100644 node_modules/clean-css/node_modules/commander/LICENSE
create mode 100644 node_modules/clean-css/node_modules/commander/Readme.md
create mode 100644 node_modules/clean-css/node_modules/commander/index.js
create mode 100644 node_modules/clean-css/node_modules/commander/package.json
create mode 100644 node_modules/clean-css/package.json
create mode 100644 node_modules/cli-color/.lint
create mode 100644 node_modules/cli-color/.npmignore
create mode 100644 node_modules/cli-color/.travis.yml
create mode 100644 node_modules/cli-color/CHANGES
create mode 100644 node_modules/cli-color/LICENSE
create mode 100644 node_modules/cli-color/README.md
create mode 100644 node_modules/cli-color/art.js
create mode 100644 node_modules/cli-color/bare.js
create mode 100644 node_modules/cli-color/beep.js
create mode 100755 node_modules/cli-color/bin/generate-color-images
create mode 100644 node_modules/cli-color/columns.js
create mode 100644 node_modules/cli-color/erase.js
create mode 100644 node_modules/cli-color/examples/art.js
create mode 100644 node_modules/cli-color/examples/basic.js
create mode 100644 node_modules/cli-color/examples/erase.js
create mode 100644 node_modules/cli-color/examples/styles.js
create mode 100644 node_modules/cli-color/examples/throbber.js
create mode 100644 node_modules/cli-color/examples/xterm.js
create mode 100644 node_modules/cli-color/get-stripped-length.js
create mode 100644 node_modules/cli-color/index.js
create mode 100644 node_modules/cli-color/lib/sgr.js
create mode 100644 node_modules/cli-color/lib/xterm-colors.js
create mode 100644 node_modules/cli-color/lib/xterm-match.js
create mode 100644 node_modules/cli-color/move.js
create mode 100644 node_modules/cli-color/package.json
create mode 100644 node_modules/cli-color/reset.js
create mode 100644 node_modules/cli-color/slice.js
create mode 100644 node_modules/cli-color/strip.js
create mode 100755 node_modules/cli-color/test/__playground/throbber.formatted.js
create mode 100755 node_modules/cli-color/test/__playground/throbber.js
create mode 100644 node_modules/cli-color/test/art.js
create mode 100644 node_modules/cli-color/test/bare.js
create mode 100644 node_modules/cli-color/test/beep.js
create mode 100644 node_modules/cli-color/test/columns.js
create mode 100644 node_modules/cli-color/test/erase.js
create mode 100644 node_modules/cli-color/test/get-stripped-length.js
create mode 100644 node_modules/cli-color/test/index.js
create mode 100644 node_modules/cli-color/test/lib/sgr.js
create mode 100644 node_modules/cli-color/test/lib/xterm-colors.js
create mode 100644 node_modules/cli-color/test/lib/xterm-match.js
create mode 100644 node_modules/cli-color/test/move.js
create mode 100644 node_modules/cli-color/test/reset.js
create mode 100644 node_modules/cli-color/test/slice.js
create mode 100644 node_modules/cli-color/test/strip.js
create mode 100644 node_modules/cli-color/test/throbber.js
create mode 100644 node_modules/cli-color/test/visual.js
create mode 100644 node_modules/cli-color/test/window-size.js
create mode 100644 node_modules/cli-color/throbber.js
create mode 100644 node_modules/cli-color/window-size.js
create mode 100644 node_modules/cliui/.coveralls.yml
create mode 100644 node_modules/cliui/.npmignore
create mode 100644 node_modules/cliui/.travis.yml
create mode 100644 node_modules/cliui/LICENSE.txt
create mode 100644 node_modules/cliui/README.md
create mode 100644 node_modules/cliui/index.js
create mode 100644 node_modules/cliui/node_modules/wordwrap/.npmignore
create mode 100644 node_modules/cliui/node_modules/wordwrap/README.markdown
create mode 100644 node_modules/cliui/node_modules/wordwrap/example/center.js
create mode 100644 node_modules/cliui/node_modules/wordwrap/example/meat.js
create mode 100644 node_modules/cliui/node_modules/wordwrap/index.js
create mode 100644 node_modules/cliui/node_modules/wordwrap/package.json
create mode 100644 node_modules/cliui/node_modules/wordwrap/test/break.js
create mode 100644 node_modules/cliui/node_modules/wordwrap/test/idleness.txt
create mode 100644 node_modules/cliui/node_modules/wordwrap/test/wrap.js
create mode 100644 node_modules/cliui/package.json
create mode 100644 node_modules/cliui/test/cliui.js
create mode 100644 node_modules/clone-stats/LICENSE.md
create mode 100644 node_modules/clone-stats/README.md
create mode 100644 node_modules/clone-stats/index.js
create mode 100644 node_modules/clone-stats/package.json
create mode 100644 node_modules/clone-stats/test.js
create mode 100644 node_modules/clone/.npmignore
create mode 100644 node_modules/clone/.travis.yml
create mode 100644 node_modules/clone/LICENSE
create mode 100644 node_modules/clone/README.md
create mode 100644 node_modules/clone/clone.js
create mode 100644 node_modules/clone/package.json
create mode 100644 node_modules/clone/test-apart-ctx.html
create mode 100644 node_modules/clone/test.html
create mode 100644 node_modules/clone/test.js
create mode 100644 node_modules/code-point-at/index.js
create mode 100644 node_modules/code-point-at/license
create mode 100644 node_modules/code-point-at/package.json
create mode 100644 node_modules/code-point-at/readme.md
create mode 100644 node_modules/commander/History.md
create mode 100644 node_modules/commander/Readme.md
create mode 100644 node_modules/commander/index.js
create mode 100644 node_modules/commander/package.json
create mode 100644 node_modules/concat-map/.travis.yml
create mode 100644 node_modules/concat-map/LICENSE
create mode 100644 node_modules/concat-map/README.markdown
create mode 100644 node_modules/concat-map/example/map.js
create mode 100644 node_modules/concat-map/index.js
create mode 100644 node_modules/concat-map/package.json
create mode 100644 node_modules/concat-map/test/map.js
create mode 100644 node_modules/config-chain/.npmignore
create mode 100644 node_modules/config-chain/LICENCE
create mode 100755 node_modules/config-chain/index.js
create mode 100644 node_modules/config-chain/package.json
create mode 100644 node_modules/config-chain/readme.markdown
create mode 100644 node_modules/config-chain/test/broken.js
create mode 100644 node_modules/config-chain/test/broken.json
create mode 100644 node_modules/config-chain/test/chain-class.js
create mode 100644 node_modules/config-chain/test/env.js
create mode 100644 node_modules/config-chain/test/find-file.js
create mode 100644 node_modules/config-chain/test/get.js
create mode 100644 node_modules/config-chain/test/ignore-unfound-file.js
create mode 100644 node_modules/config-chain/test/ini.js
create mode 100644 node_modules/config-chain/test/save.js
create mode 100644 node_modules/constantinople/.gitattributes
create mode 100644 node_modules/constantinople/.npmignore
create mode 100644 node_modules/constantinople/.travis.yml
create mode 100644 node_modules/constantinople/LICENSE
create mode 100644 node_modules/constantinople/README.md
create mode 100644 node_modules/constantinople/index.js
create mode 100644 node_modules/constantinople/package.json
create mode 100644 node_modules/constantinople/test/index.js
create mode 100644 node_modules/content-disposition/HISTORY.md
create mode 100644 node_modules/content-disposition/LICENSE
create mode 100644 node_modules/content-disposition/README.md
create mode 100644 node_modules/content-disposition/index.js
create mode 100644 node_modules/content-disposition/package.json
create mode 100644 node_modules/content-type/HISTORY.md
create mode 100644 node_modules/content-type/LICENSE
create mode 100644 node_modules/content-type/README.md
create mode 100644 node_modules/content-type/index.js
create mode 100644 node_modules/content-type/package.json
create mode 100644 node_modules/cookie-parser/HISTORY.md
create mode 100644 node_modules/cookie-parser/LICENSE
create mode 100644 node_modules/cookie-parser/README.md
create mode 100644 node_modules/cookie-parser/index.js
create mode 100644 node_modules/cookie-parser/package.json
create mode 100644 node_modules/cookie-signature/.npmignore
create mode 100644 node_modules/cookie-signature/History.md
create mode 100644 node_modules/cookie-signature/Readme.md
create mode 100644 node_modules/cookie-signature/index.js
create mode 100644 node_modules/cookie-signature/package.json
create mode 100644 node_modules/cookie/HISTORY.md
create mode 100644 node_modules/cookie/LICENSE
create mode 100644 node_modules/cookie/README.md
create mode 100644 node_modules/cookie/index.js
create mode 100644 node_modules/cookie/package.json
create mode 100644 node_modules/core-util-is/LICENSE
create mode 100644 node_modules/core-util-is/README.md
create mode 100644 node_modules/core-util-is/float.patch
create mode 100644 node_modules/core-util-is/lib/util.js
create mode 100644 node_modules/core-util-is/package.json
create mode 100644 node_modules/core-util-is/test.js
create mode 100644 node_modules/cross-env/CHANGELOG.md
create mode 100644 node_modules/cross-env/LICENSE
create mode 100644 node_modules/cross-env/README.md
create mode 100755 node_modules/cross-env/dist/bin/cross-env.js
create mode 100644 node_modules/cross-env/dist/command.js
create mode 100644 node_modules/cross-env/dist/index.js
create mode 100644 node_modules/cross-env/package.json
create mode 100644 node_modules/cross-spawn/CHANGELOG.md
create mode 100644 node_modules/cross-spawn/LICENSE
create mode 100644 node_modules/cross-spawn/README.md
create mode 100644 node_modules/cross-spawn/index.js
create mode 100644 node_modules/cross-spawn/lib/enoent.js
create mode 100644 node_modules/cross-spawn/lib/parse.js
create mode 100644 node_modules/cross-spawn/lib/util/escapeArgument.js
create mode 100644 node_modules/cross-spawn/lib/util/escapeCommand.js
create mode 100644 node_modules/cross-spawn/lib/util/hasEmptyArgumentBug.js
create mode 100644 node_modules/cross-spawn/lib/util/readShebang.js
create mode 100644 node_modules/cross-spawn/lib/util/resolveCommand.js
create mode 100644 node_modules/cross-spawn/package.json
create mode 100644 node_modules/css-parse/.npmignore
create mode 100644 node_modules/css-parse/History.md
create mode 100644 node_modules/css-parse/Makefile
create mode 100644 node_modules/css-parse/Readme.md
create mode 100644 node_modules/css-parse/component.json
create mode 100644 node_modules/css-parse/index.js
create mode 100644 node_modules/css-parse/package.json
create mode 100644 node_modules/css-stringify/.npmignore
create mode 100644 node_modules/css-stringify/History.md
create mode 100644 node_modules/css-stringify/Makefile
create mode 100644 node_modules/css-stringify/Readme.md
create mode 100644 node_modules/css-stringify/component.json
create mode 100644 node_modules/css-stringify/index.js
create mode 100644 node_modules/css-stringify/package.json
create mode 100644 node_modules/css/.npmignore
create mode 100644 node_modules/css/History.md
create mode 100644 node_modules/css/Makefile
create mode 100644 node_modules/css/Readme.md
create mode 100644 node_modules/css/benchmark.js
create mode 100644 node_modules/css/component.json
create mode 100644 node_modules/css/index.js
create mode 100644 node_modules/css/package.json
create mode 100644 node_modules/css/test.js
create mode 100644 node_modules/d/.lint
create mode 100644 node_modules/d/.npmignore
create mode 100644 node_modules/d/.travis.yml
create mode 100644 node_modules/d/CHANGES
create mode 100644 node_modules/d/LICENSE
create mode 100644 node_modules/d/README.md
create mode 100644 node_modules/d/auto-bind.js
create mode 100644 node_modules/d/index.js
create mode 100644 node_modules/d/lazy.js
create mode 100644 node_modules/d/package.json
create mode 100644 node_modules/d/test/auto-bind.js
create mode 100644 node_modules/d/test/index.js
create mode 100644 node_modules/d/test/lazy.js
create mode 100644 node_modules/dateformat/.npmignore
create mode 100644 node_modules/dateformat/LICENSE
create mode 100644 node_modules/dateformat/Readme.md
create mode 100644 node_modules/dateformat/lib/dateformat.js
create mode 100644 node_modules/dateformat/package.json
create mode 100644 node_modules/debug/.coveralls.yml
create mode 100644 node_modules/debug/.eslintrc
create mode 100644 node_modules/debug/.npmignore
create mode 100644 node_modules/debug/.travis.yml
create mode 100644 node_modules/debug/CHANGELOG.md
create mode 100644 node_modules/debug/LICENSE
create mode 100644 node_modules/debug/Makefile
create mode 100644 node_modules/debug/README.md
create mode 100644 node_modules/debug/component.json
create mode 100644 node_modules/debug/karma.conf.js
create mode 100644 node_modules/debug/node.js
create mode 100644 node_modules/debug/node_modules/ms/index.js
create mode 100644 node_modules/debug/node_modules/ms/license.md
create mode 100644 node_modules/debug/node_modules/ms/package.json
create mode 100644 node_modules/debug/node_modules/ms/readme.md
create mode 100644 node_modules/debug/package.json
create mode 100644 node_modules/debug/src/browser.js
create mode 100644 node_modules/debug/src/debug.js
create mode 100644 node_modules/debug/src/index.js
create mode 100644 node_modules/debug/src/node.js
create mode 100644 node_modules/decamelize/index.js
create mode 100644 node_modules/decamelize/license
create mode 100644 node_modules/decamelize/package.json
create mode 100644 node_modules/decamelize/readme.md
create mode 100644 node_modules/defaults/.npmignore
create mode 100644 node_modules/defaults/LICENSE
create mode 100644 node_modules/defaults/README.md
create mode 100644 node_modules/defaults/index.js
create mode 100644 node_modules/defaults/package.json
create mode 100644 node_modules/defaults/test.js
create mode 100644 node_modules/depd/History.md
create mode 100644 node_modules/depd/LICENSE
create mode 100644 node_modules/depd/Readme.md
create mode 100644 node_modules/depd/index.js
create mode 100644 node_modules/depd/lib/browser/index.js
create mode 100644 node_modules/depd/lib/compat/buffer-concat.js
create mode 100644 node_modules/depd/lib/compat/callsite-tostring.js
create mode 100644 node_modules/depd/lib/compat/event-listener-count.js
create mode 100644 node_modules/depd/lib/compat/index.js
create mode 100644 node_modules/depd/package.json
create mode 100644 node_modules/deprecated/.npmignore
create mode 100644 node_modules/deprecated/.travis.yml
create mode 100755 node_modules/deprecated/LICENSE
create mode 100644 node_modules/deprecated/README.md
create mode 100644 node_modules/deprecated/index.js
create mode 100644 node_modules/deprecated/package.json
create mode 100644 node_modules/deprecated/test/field.js
create mode 100644 node_modules/deprecated/test/method.js
create mode 100644 node_modules/destroy/LICENSE
create mode 100644 node_modules/destroy/README.md
create mode 100644 node_modules/destroy/index.js
create mode 100644 node_modules/destroy/package.json
create mode 100644 node_modules/detect-file/LICENSE
create mode 100644 node_modules/detect-file/README.md
create mode 100644 node_modules/detect-file/index.js
create mode 100644 node_modules/detect-file/package.json
create mode 100644 node_modules/dottie/.npmignore
create mode 100644 node_modules/dottie/.travis.yml
create mode 100644 node_modules/dottie/LICENSE
create mode 100644 node_modules/dottie/README.md
create mode 100644 node_modules/dottie/dottie.js
create mode 100644 node_modules/dottie/package.json
create mode 100644 node_modules/dottie/test/find.test.js
create mode 100644 node_modules/dottie/test/flatten.test.js
create mode 100644 node_modules/dottie/test/get.test.js
create mode 100644 node_modules/dottie/test/paths.test.js
create mode 100644 node_modules/dottie/test/set.test.js
create mode 100644 node_modules/dottie/test/transform.test.js
create mode 100644 node_modules/duplexer2/.npmignore
create mode 100644 node_modules/duplexer2/.travis.yml
create mode 100644 node_modules/duplexer2/LICENSE.md
create mode 100644 node_modules/duplexer2/README.md
create mode 100755 node_modules/duplexer2/example.js
create mode 100644 node_modules/duplexer2/index.js
create mode 100644 node_modules/duplexer2/package.json
create mode 100644 node_modules/duplexer2/test/tests.js
create mode 100644 node_modules/editorconfig/.editorconfig
create mode 100644 node_modules/editorconfig/.gitattributes
create mode 100644 node_modules/editorconfig/.gitmodules
create mode 100644 node_modules/editorconfig/.npmignore
create mode 100644 node_modules/editorconfig/.travis.yml
create mode 100644 node_modules/editorconfig/CMakeLists.txt
create mode 100644 node_modules/editorconfig/LICENSE
create mode 100644 node_modules/editorconfig/README.md
create mode 100755 node_modules/editorconfig/bin/editorconfig
create mode 100644 node_modules/editorconfig/editorconfig.js
create mode 100644 node_modules/editorconfig/lib/fnmatch.js
create mode 100644 node_modules/editorconfig/lib/ini.js
create mode 100644 node_modules/editorconfig/lib/version.js
create mode 100644 node_modules/editorconfig/node_modules/commander/History.md
create mode 100644 node_modules/editorconfig/node_modules/commander/LICENSE
create mode 100644 node_modules/editorconfig/node_modules/commander/Readme.md
create mode 100644 node_modules/editorconfig/node_modules/commander/index.js
create mode 100644 node_modules/editorconfig/node_modules/commander/package.json
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/.npmignore
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/.travis.yml
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/CONTRIBUTORS
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/LICENSE
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/README.md
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/lib/lru-cache.js
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/package.json
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/test/basic.js
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/test/foreach.js
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/test/memory-leak.js
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/test/overflow.js
create mode 100644 node_modules/editorconfig/node_modules/lru-cache/test/serialize.js
create mode 100644 node_modules/editorconfig/package.json
create mode 100644 node_modules/editorconfig/test/app.js
create mode 100644 node_modules/editorconfig/test/index.js
create mode 100644 node_modules/ee-first/LICENSE
create mode 100644 node_modules/ee-first/README.md
create mode 100644 node_modules/ee-first/index.js
create mode 100644 node_modules/ee-first/package.json
create mode 100644 node_modules/encodeurl/HISTORY.md
create mode 100644 node_modules/encodeurl/LICENSE
create mode 100644 node_modules/encodeurl/README.md
create mode 100644 node_modules/encodeurl/index.js
create mode 100644 node_modules/encodeurl/package.json
create mode 100644 node_modules/end-of-stream/.npmignore
create mode 100644 node_modules/end-of-stream/README.md
create mode 100644 node_modules/end-of-stream/index.js
create mode 100644 node_modules/end-of-stream/package.json
create mode 100644 node_modules/end-of-stream/test.js
create mode 100644 node_modules/error-ex/LICENSE
create mode 100644 node_modules/error-ex/README.md
create mode 100644 node_modules/error-ex/index.js
create mode 100644 node_modules/error-ex/package.json
create mode 100644 node_modules/es5-ext/.lint
create mode 100644 node_modules/es5-ext/.lintignore
create mode 100644 node_modules/es5-ext/.npmignore
create mode 100644 node_modules/es5-ext/.travis.yml
create mode 100644 node_modules/es5-ext/CHANGES
create mode 100644 node_modules/es5-ext/LICENSE
create mode 100644 node_modules/es5-ext/README.md
create mode 100644 node_modules/es5-ext/array/#/@@iterator/implement.js
create mode 100644 node_modules/es5-ext/array/#/@@iterator/index.js
create mode 100644 node_modules/es5-ext/array/#/@@iterator/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/@@iterator/shim.js
create mode 100644 node_modules/es5-ext/array/#/_compare-by-length.js
create mode 100644 node_modules/es5-ext/array/#/binary-search.js
create mode 100644 node_modules/es5-ext/array/#/clear.js
create mode 100644 node_modules/es5-ext/array/#/compact.js
create mode 100644 node_modules/es5-ext/array/#/concat/implement.js
create mode 100644 node_modules/es5-ext/array/#/concat/index.js
create mode 100644 node_modules/es5-ext/array/#/concat/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/concat/shim.js
create mode 100644 node_modules/es5-ext/array/#/contains.js
create mode 100644 node_modules/es5-ext/array/#/copy-within/implement.js
create mode 100644 node_modules/es5-ext/array/#/copy-within/index.js
create mode 100644 node_modules/es5-ext/array/#/copy-within/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/copy-within/shim.js
create mode 100644 node_modules/es5-ext/array/#/diff.js
create mode 100644 node_modules/es5-ext/array/#/e-index-of.js
create mode 100644 node_modules/es5-ext/array/#/e-last-index-of.js
create mode 100644 node_modules/es5-ext/array/#/entries/implement.js
create mode 100644 node_modules/es5-ext/array/#/entries/index.js
create mode 100644 node_modules/es5-ext/array/#/entries/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/entries/shim.js
create mode 100644 node_modules/es5-ext/array/#/exclusion.js
create mode 100644 node_modules/es5-ext/array/#/fill/implement.js
create mode 100644 node_modules/es5-ext/array/#/fill/index.js
create mode 100644 node_modules/es5-ext/array/#/fill/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/fill/shim.js
create mode 100644 node_modules/es5-ext/array/#/filter/implement.js
create mode 100644 node_modules/es5-ext/array/#/filter/index.js
create mode 100644 node_modules/es5-ext/array/#/filter/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/filter/shim.js
create mode 100644 node_modules/es5-ext/array/#/find-index/implement.js
create mode 100644 node_modules/es5-ext/array/#/find-index/index.js
create mode 100644 node_modules/es5-ext/array/#/find-index/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/find-index/shim.js
create mode 100644 node_modules/es5-ext/array/#/find/implement.js
create mode 100644 node_modules/es5-ext/array/#/find/index.js
create mode 100644 node_modules/es5-ext/array/#/find/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/find/shim.js
create mode 100644 node_modules/es5-ext/array/#/first-index.js
create mode 100644 node_modules/es5-ext/array/#/first.js
create mode 100644 node_modules/es5-ext/array/#/flatten.js
create mode 100644 node_modules/es5-ext/array/#/for-each-right.js
create mode 100644 node_modules/es5-ext/array/#/group.js
create mode 100644 node_modules/es5-ext/array/#/index.js
create mode 100644 node_modules/es5-ext/array/#/indexes-of.js
create mode 100644 node_modules/es5-ext/array/#/intersection.js
create mode 100644 node_modules/es5-ext/array/#/is-copy.js
create mode 100644 node_modules/es5-ext/array/#/is-uniq.js
create mode 100644 node_modules/es5-ext/array/#/keys/implement.js
create mode 100644 node_modules/es5-ext/array/#/keys/index.js
create mode 100644 node_modules/es5-ext/array/#/keys/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/keys/shim.js
create mode 100644 node_modules/es5-ext/array/#/last-index.js
create mode 100644 node_modules/es5-ext/array/#/last.js
create mode 100644 node_modules/es5-ext/array/#/map/implement.js
create mode 100644 node_modules/es5-ext/array/#/map/index.js
create mode 100644 node_modules/es5-ext/array/#/map/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/map/shim.js
create mode 100644 node_modules/es5-ext/array/#/remove.js
create mode 100644 node_modules/es5-ext/array/#/separate.js
create mode 100644 node_modules/es5-ext/array/#/slice/implement.js
create mode 100644 node_modules/es5-ext/array/#/slice/index.js
create mode 100644 node_modules/es5-ext/array/#/slice/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/slice/shim.js
create mode 100644 node_modules/es5-ext/array/#/some-right.js
create mode 100644 node_modules/es5-ext/array/#/splice/implement.js
create mode 100644 node_modules/es5-ext/array/#/splice/index.js
create mode 100644 node_modules/es5-ext/array/#/splice/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/splice/shim.js
create mode 100644 node_modules/es5-ext/array/#/uniq.js
create mode 100644 node_modules/es5-ext/array/#/values/implement.js
create mode 100644 node_modules/es5-ext/array/#/values/index.js
create mode 100644 node_modules/es5-ext/array/#/values/is-implemented.js
create mode 100644 node_modules/es5-ext/array/#/values/shim.js
create mode 100644 node_modules/es5-ext/array/_is-extensible.js
create mode 100644 node_modules/es5-ext/array/_sub-array-dummy-safe.js
create mode 100644 node_modules/es5-ext/array/_sub-array-dummy.js
create mode 100644 node_modules/es5-ext/array/from/implement.js
create mode 100644 node_modules/es5-ext/array/from/index.js
create mode 100644 node_modules/es5-ext/array/from/is-implemented.js
create mode 100644 node_modules/es5-ext/array/from/shim.js
create mode 100644 node_modules/es5-ext/array/generate.js
create mode 100644 node_modules/es5-ext/array/index.js
create mode 100644 node_modules/es5-ext/array/is-plain-array.js
create mode 100644 node_modules/es5-ext/array/of/implement.js
create mode 100644 node_modules/es5-ext/array/of/index.js
create mode 100644 node_modules/es5-ext/array/of/is-implemented.js
create mode 100644 node_modules/es5-ext/array/of/shim.js
create mode 100644 node_modules/es5-ext/array/to-array.js
create mode 100644 node_modules/es5-ext/array/valid-array.js
create mode 100644 node_modules/es5-ext/boolean/index.js
create mode 100644 node_modules/es5-ext/boolean/is-boolean.js
create mode 100644 node_modules/es5-ext/date/#/copy.js
create mode 100644 node_modules/es5-ext/date/#/days-in-month.js
create mode 100644 node_modules/es5-ext/date/#/floor-day.js
create mode 100644 node_modules/es5-ext/date/#/floor-month.js
create mode 100644 node_modules/es5-ext/date/#/floor-year.js
create mode 100644 node_modules/es5-ext/date/#/format.js
create mode 100644 node_modules/es5-ext/date/#/index.js
create mode 100644 node_modules/es5-ext/date/index.js
create mode 100644 node_modules/es5-ext/date/is-date.js
create mode 100644 node_modules/es5-ext/date/valid-date.js
create mode 100644 node_modules/es5-ext/error/#/index.js
create mode 100644 node_modules/es5-ext/error/#/throw.js
create mode 100644 node_modules/es5-ext/error/custom.js
create mode 100644 node_modules/es5-ext/error/index.js
create mode 100644 node_modules/es5-ext/error/is-error.js
create mode 100644 node_modules/es5-ext/error/valid-error.js
create mode 100644 node_modules/es5-ext/function/#/compose.js
create mode 100644 node_modules/es5-ext/function/#/copy.js
create mode 100644 node_modules/es5-ext/function/#/curry.js
create mode 100644 node_modules/es5-ext/function/#/index.js
create mode 100644 node_modules/es5-ext/function/#/lock.js
create mode 100644 node_modules/es5-ext/function/#/not.js
create mode 100644 node_modules/es5-ext/function/#/partial.js
create mode 100644 node_modules/es5-ext/function/#/spread.js
create mode 100644 node_modules/es5-ext/function/#/to-string-tokens.js
create mode 100644 node_modules/es5-ext/function/_define-length.js
create mode 100644 node_modules/es5-ext/function/constant.js
create mode 100644 node_modules/es5-ext/function/identity.js
create mode 100644 node_modules/es5-ext/function/index.js
create mode 100644 node_modules/es5-ext/function/invoke.js
create mode 100644 node_modules/es5-ext/function/is-arguments.js
create mode 100644 node_modules/es5-ext/function/is-function.js
create mode 100644 node_modules/es5-ext/function/noop.js
create mode 100644 node_modules/es5-ext/function/pluck.js
create mode 100644 node_modules/es5-ext/function/valid-function.js
create mode 100644 node_modules/es5-ext/global.js
create mode 100644 node_modules/es5-ext/index.js
create mode 100644 node_modules/es5-ext/iterable/for-each.js
create mode 100644 node_modules/es5-ext/iterable/index.js
create mode 100644 node_modules/es5-ext/iterable/is.js
create mode 100644 node_modules/es5-ext/iterable/validate-object.js
create mode 100644 node_modules/es5-ext/iterable/validate.js
create mode 100644 node_modules/es5-ext/json/index.js
create mode 100644 node_modules/es5-ext/json/safe-stringify.js
create mode 100644 node_modules/es5-ext/math/_pack-ieee754.js
create mode 100644 node_modules/es5-ext/math/_unpack-ieee754.js
create mode 100644 node_modules/es5-ext/math/acosh/implement.js
create mode 100644 node_modules/es5-ext/math/acosh/index.js
create mode 100644 node_modules/es5-ext/math/acosh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/acosh/shim.js
create mode 100644 node_modules/es5-ext/math/asinh/implement.js
create mode 100644 node_modules/es5-ext/math/asinh/index.js
create mode 100644 node_modules/es5-ext/math/asinh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/asinh/shim.js
create mode 100644 node_modules/es5-ext/math/atanh/implement.js
create mode 100644 node_modules/es5-ext/math/atanh/index.js
create mode 100644 node_modules/es5-ext/math/atanh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/atanh/shim.js
create mode 100644 node_modules/es5-ext/math/cbrt/implement.js
create mode 100644 node_modules/es5-ext/math/cbrt/index.js
create mode 100644 node_modules/es5-ext/math/cbrt/is-implemented.js
create mode 100644 node_modules/es5-ext/math/cbrt/shim.js
create mode 100644 node_modules/es5-ext/math/clz32/implement.js
create mode 100644 node_modules/es5-ext/math/clz32/index.js
create mode 100644 node_modules/es5-ext/math/clz32/is-implemented.js
create mode 100644 node_modules/es5-ext/math/clz32/shim.js
create mode 100644 node_modules/es5-ext/math/cosh/implement.js
create mode 100644 node_modules/es5-ext/math/cosh/index.js
create mode 100644 node_modules/es5-ext/math/cosh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/cosh/shim.js
create mode 100644 node_modules/es5-ext/math/expm1/implement.js
create mode 100644 node_modules/es5-ext/math/expm1/index.js
create mode 100644 node_modules/es5-ext/math/expm1/is-implemented.js
create mode 100644 node_modules/es5-ext/math/expm1/shim.js
create mode 100644 node_modules/es5-ext/math/fround/implement.js
create mode 100644 node_modules/es5-ext/math/fround/index.js
create mode 100644 node_modules/es5-ext/math/fround/is-implemented.js
create mode 100644 node_modules/es5-ext/math/fround/shim.js
create mode 100644 node_modules/es5-ext/math/hypot/implement.js
create mode 100644 node_modules/es5-ext/math/hypot/index.js
create mode 100644 node_modules/es5-ext/math/hypot/is-implemented.js
create mode 100644 node_modules/es5-ext/math/hypot/shim.js
create mode 100644 node_modules/es5-ext/math/imul/implement.js
create mode 100644 node_modules/es5-ext/math/imul/index.js
create mode 100644 node_modules/es5-ext/math/imul/is-implemented.js
create mode 100644 node_modules/es5-ext/math/imul/shim.js
create mode 100644 node_modules/es5-ext/math/index.js
create mode 100644 node_modules/es5-ext/math/log10/implement.js
create mode 100644 node_modules/es5-ext/math/log10/index.js
create mode 100644 node_modules/es5-ext/math/log10/is-implemented.js
create mode 100644 node_modules/es5-ext/math/log10/shim.js
create mode 100644 node_modules/es5-ext/math/log1p/implement.js
create mode 100644 node_modules/es5-ext/math/log1p/index.js
create mode 100644 node_modules/es5-ext/math/log1p/is-implemented.js
create mode 100644 node_modules/es5-ext/math/log1p/shim.js
create mode 100644 node_modules/es5-ext/math/log2/implement.js
create mode 100644 node_modules/es5-ext/math/log2/index.js
create mode 100644 node_modules/es5-ext/math/log2/is-implemented.js
create mode 100644 node_modules/es5-ext/math/log2/shim.js
create mode 100644 node_modules/es5-ext/math/sign/implement.js
create mode 100644 node_modules/es5-ext/math/sign/index.js
create mode 100644 node_modules/es5-ext/math/sign/is-implemented.js
create mode 100644 node_modules/es5-ext/math/sign/shim.js
create mode 100644 node_modules/es5-ext/math/sinh/implement.js
create mode 100644 node_modules/es5-ext/math/sinh/index.js
create mode 100644 node_modules/es5-ext/math/sinh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/sinh/shim.js
create mode 100644 node_modules/es5-ext/math/tanh/implement.js
create mode 100644 node_modules/es5-ext/math/tanh/index.js
create mode 100644 node_modules/es5-ext/math/tanh/is-implemented.js
create mode 100644 node_modules/es5-ext/math/tanh/shim.js
create mode 100644 node_modules/es5-ext/math/trunc/implement.js
create mode 100644 node_modules/es5-ext/math/trunc/index.js
create mode 100644 node_modules/es5-ext/math/trunc/is-implemented.js
create mode 100644 node_modules/es5-ext/math/trunc/shim.js
create mode 100644 node_modules/es5-ext/number/#/index.js
create mode 100644 node_modules/es5-ext/number/#/pad.js
create mode 100644 node_modules/es5-ext/number/epsilon/implement.js
create mode 100644 node_modules/es5-ext/number/epsilon/index.js
create mode 100644 node_modules/es5-ext/number/epsilon/is-implemented.js
create mode 100644 node_modules/es5-ext/number/index.js
create mode 100644 node_modules/es5-ext/number/is-finite/implement.js
create mode 100644 node_modules/es5-ext/number/is-finite/index.js
create mode 100644 node_modules/es5-ext/number/is-finite/is-implemented.js
create mode 100644 node_modules/es5-ext/number/is-finite/shim.js
create mode 100644 node_modules/es5-ext/number/is-integer/implement.js
create mode 100644 node_modules/es5-ext/number/is-integer/index.js
create mode 100644 node_modules/es5-ext/number/is-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/number/is-integer/shim.js
create mode 100644 node_modules/es5-ext/number/is-nan/implement.js
create mode 100644 node_modules/es5-ext/number/is-nan/index.js
create mode 100644 node_modules/es5-ext/number/is-nan/is-implemented.js
create mode 100644 node_modules/es5-ext/number/is-nan/shim.js
create mode 100644 node_modules/es5-ext/number/is-natural.js
create mode 100644 node_modules/es5-ext/number/is-number.js
create mode 100644 node_modules/es5-ext/number/is-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/number/is-safe-integer/index.js
create mode 100644 node_modules/es5-ext/number/is-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/number/is-safe-integer/shim.js
create mode 100644 node_modules/es5-ext/number/max-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/number/max-safe-integer/index.js
create mode 100644 node_modules/es5-ext/number/max-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/number/min-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/number/min-safe-integer/index.js
create mode 100644 node_modules/es5-ext/number/min-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/number/to-integer.js
create mode 100644 node_modules/es5-ext/number/to-pos-integer.js
create mode 100644 node_modules/es5-ext/number/to-uint32.js
create mode 100644 node_modules/es5-ext/object/_iterate.js
create mode 100644 node_modules/es5-ext/object/assign/implement.js
create mode 100644 node_modules/es5-ext/object/assign/index.js
create mode 100644 node_modules/es5-ext/object/assign/is-implemented.js
create mode 100644 node_modules/es5-ext/object/assign/shim.js
create mode 100644 node_modules/es5-ext/object/clear.js
create mode 100644 node_modules/es5-ext/object/compact.js
create mode 100644 node_modules/es5-ext/object/compare.js
create mode 100644 node_modules/es5-ext/object/copy-deep.js
create mode 100644 node_modules/es5-ext/object/copy.js
create mode 100644 node_modules/es5-ext/object/count.js
create mode 100644 node_modules/es5-ext/object/create.js
create mode 100644 node_modules/es5-ext/object/ensure-natural-number-value.js
create mode 100644 node_modules/es5-ext/object/ensure-natural-number.js
create mode 100644 node_modules/es5-ext/object/eq.js
create mode 100644 node_modules/es5-ext/object/every.js
create mode 100644 node_modules/es5-ext/object/filter.js
create mode 100644 node_modules/es5-ext/object/find-key.js
create mode 100644 node_modules/es5-ext/object/find.js
create mode 100644 node_modules/es5-ext/object/first-key.js
create mode 100644 node_modules/es5-ext/object/flatten.js
create mode 100644 node_modules/es5-ext/object/for-each.js
create mode 100644 node_modules/es5-ext/object/get-property-names.js
create mode 100644 node_modules/es5-ext/object/index.js
create mode 100644 node_modules/es5-ext/object/is-array-like.js
create mode 100644 node_modules/es5-ext/object/is-callable.js
create mode 100644 node_modules/es5-ext/object/is-copy-deep.js
create mode 100644 node_modules/es5-ext/object/is-copy.js
create mode 100644 node_modules/es5-ext/object/is-empty.js
create mode 100644 node_modules/es5-ext/object/is-number-value.js
create mode 100644 node_modules/es5-ext/object/is-object.js
create mode 100644 node_modules/es5-ext/object/is-plain-object.js
create mode 100644 node_modules/es5-ext/object/is-value.js
create mode 100644 node_modules/es5-ext/object/is.js
create mode 100644 node_modules/es5-ext/object/key-of.js
create mode 100644 node_modules/es5-ext/object/keys/implement.js
create mode 100644 node_modules/es5-ext/object/keys/index.js
create mode 100644 node_modules/es5-ext/object/keys/is-implemented.js
create mode 100644 node_modules/es5-ext/object/keys/shim.js
create mode 100644 node_modules/es5-ext/object/map-keys.js
create mode 100644 node_modules/es5-ext/object/map.js
create mode 100644 node_modules/es5-ext/object/mixin-prototypes.js
create mode 100644 node_modules/es5-ext/object/mixin.js
create mode 100644 node_modules/es5-ext/object/normalize-options.js
create mode 100644 node_modules/es5-ext/object/primitive-set.js
create mode 100644 node_modules/es5-ext/object/safe-traverse.js
create mode 100644 node_modules/es5-ext/object/serialize.js
create mode 100644 node_modules/es5-ext/object/set-prototype-of/implement.js
create mode 100644 node_modules/es5-ext/object/set-prototype-of/index.js
create mode 100644 node_modules/es5-ext/object/set-prototype-of/is-implemented.js
create mode 100644 node_modules/es5-ext/object/set-prototype-of/shim.js
create mode 100644 node_modules/es5-ext/object/some.js
create mode 100644 node_modules/es5-ext/object/to-array.js
create mode 100644 node_modules/es5-ext/object/unserialize.js
create mode 100644 node_modules/es5-ext/object/valid-callable.js
create mode 100644 node_modules/es5-ext/object/valid-object.js
create mode 100644 node_modules/es5-ext/object/valid-value.js
create mode 100644 node_modules/es5-ext/object/validate-array-like-object.js
create mode 100644 node_modules/es5-ext/object/validate-array-like.js
create mode 100644 node_modules/es5-ext/object/validate-stringifiable-value.js
create mode 100644 node_modules/es5-ext/object/validate-stringifiable.js
create mode 100644 node_modules/es5-ext/package.json
create mode 100644 node_modules/es5-ext/reg-exp/#/index.js
create mode 100644 node_modules/es5-ext/reg-exp/#/is-sticky.js
create mode 100644 node_modules/es5-ext/reg-exp/#/is-unicode.js
create mode 100644 node_modules/es5-ext/reg-exp/#/match/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/match/index.js
create mode 100644 node_modules/es5-ext/reg-exp/#/match/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/#/match/shim.js
create mode 100644 node_modules/es5-ext/reg-exp/#/replace/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/replace/index.js
create mode 100644 node_modules/es5-ext/reg-exp/#/replace/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/#/replace/shim.js
create mode 100644 node_modules/es5-ext/reg-exp/#/search/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/search/index.js
create mode 100644 node_modules/es5-ext/reg-exp/#/search/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/#/search/shim.js
create mode 100644 node_modules/es5-ext/reg-exp/#/split/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/split/index.js
create mode 100644 node_modules/es5-ext/reg-exp/#/split/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/#/split/shim.js
create mode 100644 node_modules/es5-ext/reg-exp/#/sticky/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/#/unicode/implement.js
create mode 100644 node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js
create mode 100644 node_modules/es5-ext/reg-exp/escape.js
create mode 100644 node_modules/es5-ext/reg-exp/index.js
create mode 100644 node_modules/es5-ext/reg-exp/is-reg-exp.js
create mode 100644 node_modules/es5-ext/reg-exp/valid-reg-exp.js
create mode 100644 node_modules/es5-ext/string/#/@@iterator/implement.js
create mode 100644 node_modules/es5-ext/string/#/@@iterator/index.js
create mode 100644 node_modules/es5-ext/string/#/@@iterator/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/@@iterator/shim.js
create mode 100644 node_modules/es5-ext/string/#/at.js
create mode 100644 node_modules/es5-ext/string/#/camel-to-hyphen.js
create mode 100644 node_modules/es5-ext/string/#/capitalize.js
create mode 100644 node_modules/es5-ext/string/#/case-insensitive-compare.js
create mode 100644 node_modules/es5-ext/string/#/code-point-at/implement.js
create mode 100644 node_modules/es5-ext/string/#/code-point-at/index.js
create mode 100644 node_modules/es5-ext/string/#/code-point-at/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/code-point-at/shim.js
create mode 100644 node_modules/es5-ext/string/#/contains/implement.js
create mode 100644 node_modules/es5-ext/string/#/contains/index.js
create mode 100644 node_modules/es5-ext/string/#/contains/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/contains/shim.js
create mode 100644 node_modules/es5-ext/string/#/ends-with/implement.js
create mode 100644 node_modules/es5-ext/string/#/ends-with/index.js
create mode 100644 node_modules/es5-ext/string/#/ends-with/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/ends-with/shim.js
create mode 100644 node_modules/es5-ext/string/#/hyphen-to-camel.js
create mode 100644 node_modules/es5-ext/string/#/indent.js
create mode 100644 node_modules/es5-ext/string/#/index.js
create mode 100644 node_modules/es5-ext/string/#/last.js
create mode 100644 node_modules/es5-ext/string/#/normalize/_data.js
create mode 100644 node_modules/es5-ext/string/#/normalize/implement.js
create mode 100644 node_modules/es5-ext/string/#/normalize/index.js
create mode 100644 node_modules/es5-ext/string/#/normalize/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/normalize/shim.js
create mode 100644 node_modules/es5-ext/string/#/pad.js
create mode 100644 node_modules/es5-ext/string/#/plain-replace-all.js
create mode 100644 node_modules/es5-ext/string/#/plain-replace.js
create mode 100644 node_modules/es5-ext/string/#/repeat/implement.js
create mode 100644 node_modules/es5-ext/string/#/repeat/index.js
create mode 100644 node_modules/es5-ext/string/#/repeat/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/repeat/shim.js
create mode 100644 node_modules/es5-ext/string/#/starts-with/implement.js
create mode 100644 node_modules/es5-ext/string/#/starts-with/index.js
create mode 100644 node_modules/es5-ext/string/#/starts-with/is-implemented.js
create mode 100644 node_modules/es5-ext/string/#/starts-with/shim.js
create mode 100644 node_modules/es5-ext/string/#/uncapitalize.js
create mode 100644 node_modules/es5-ext/string/format-method.js
create mode 100644 node_modules/es5-ext/string/from-code-point/implement.js
create mode 100644 node_modules/es5-ext/string/from-code-point/index.js
create mode 100644 node_modules/es5-ext/string/from-code-point/is-implemented.js
create mode 100644 node_modules/es5-ext/string/from-code-point/shim.js
create mode 100644 node_modules/es5-ext/string/index.js
create mode 100644 node_modules/es5-ext/string/is-string.js
create mode 100644 node_modules/es5-ext/string/random-uniq.js
create mode 100644 node_modules/es5-ext/string/raw/implement.js
create mode 100644 node_modules/es5-ext/string/raw/index.js
create mode 100644 node_modules/es5-ext/string/raw/is-implemented.js
create mode 100644 node_modules/es5-ext/string/raw/shim.js
create mode 100644 node_modules/es5-ext/test/__tad.js
create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/index.js
create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/@@iterator/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/_compare-by-length.js
create mode 100644 node_modules/es5-ext/test/array/#/binary-search.js
create mode 100644 node_modules/es5-ext/test/array/#/clear.js
create mode 100644 node_modules/es5-ext/test/array/#/compact.js
create mode 100644 node_modules/es5-ext/test/array/#/concat/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/concat/index.js
create mode 100644 node_modules/es5-ext/test/array/#/concat/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/concat/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/contains.js
create mode 100644 node_modules/es5-ext/test/array/#/copy-within/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/copy-within/index.js
create mode 100644 node_modules/es5-ext/test/array/#/copy-within/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/copy-within/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/diff.js
create mode 100644 node_modules/es5-ext/test/array/#/e-index-of.js
create mode 100644 node_modules/es5-ext/test/array/#/e-last-index-of.js
create mode 100644 node_modules/es5-ext/test/array/#/entries/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/entries/index.js
create mode 100644 node_modules/es5-ext/test/array/#/entries/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/entries/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/exclusion.js
create mode 100644 node_modules/es5-ext/test/array/#/fill/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/fill/index.js
create mode 100644 node_modules/es5-ext/test/array/#/fill/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/fill/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/filter/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/filter/index.js
create mode 100644 node_modules/es5-ext/test/array/#/filter/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/filter/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/find-index/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/find-index/index.js
create mode 100644 node_modules/es5-ext/test/array/#/find-index/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/find-index/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/find/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/find/index.js
create mode 100644 node_modules/es5-ext/test/array/#/find/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/find/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/first-index.js
create mode 100644 node_modules/es5-ext/test/array/#/first.js
create mode 100644 node_modules/es5-ext/test/array/#/flatten.js
create mode 100644 node_modules/es5-ext/test/array/#/for-each-right.js
create mode 100644 node_modules/es5-ext/test/array/#/group.js
create mode 100644 node_modules/es5-ext/test/array/#/indexes-of.js
create mode 100644 node_modules/es5-ext/test/array/#/intersection.js
create mode 100644 node_modules/es5-ext/test/array/#/is-copy.js
create mode 100644 node_modules/es5-ext/test/array/#/is-uniq.js
create mode 100644 node_modules/es5-ext/test/array/#/keys/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/keys/index.js
create mode 100644 node_modules/es5-ext/test/array/#/keys/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/keys/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/last-index.js
create mode 100644 node_modules/es5-ext/test/array/#/last.js
create mode 100644 node_modules/es5-ext/test/array/#/map/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/map/index.js
create mode 100644 node_modules/es5-ext/test/array/#/map/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/map/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/remove.js
create mode 100644 node_modules/es5-ext/test/array/#/separate.js
create mode 100644 node_modules/es5-ext/test/array/#/slice/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/slice/index.js
create mode 100644 node_modules/es5-ext/test/array/#/slice/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/slice/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/some-right.js
create mode 100644 node_modules/es5-ext/test/array/#/splice/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/splice/index.js
create mode 100644 node_modules/es5-ext/test/array/#/splice/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/splice/shim.js
create mode 100644 node_modules/es5-ext/test/array/#/uniq.js
create mode 100644 node_modules/es5-ext/test/array/#/values/implement.js
create mode 100644 node_modules/es5-ext/test/array/#/values/index.js
create mode 100644 node_modules/es5-ext/test/array/#/values/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/#/values/shim.js
create mode 100644 node_modules/es5-ext/test/array/__scopes.js
create mode 100644 node_modules/es5-ext/test/array/_is-extensible.js
create mode 100644 node_modules/es5-ext/test/array/_sub-array-dummy-safe.js
create mode 100644 node_modules/es5-ext/test/array/_sub-array-dummy.js
create mode 100644 node_modules/es5-ext/test/array/from/implement.js
create mode 100644 node_modules/es5-ext/test/array/from/index.js
create mode 100644 node_modules/es5-ext/test/array/from/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/from/shim.js
create mode 100644 node_modules/es5-ext/test/array/generate.js
create mode 100644 node_modules/es5-ext/test/array/is-plain-array.js
create mode 100644 node_modules/es5-ext/test/array/of/implement.js
create mode 100644 node_modules/es5-ext/test/array/of/index.js
create mode 100644 node_modules/es5-ext/test/array/of/is-implemented.js
create mode 100644 node_modules/es5-ext/test/array/of/shim.js
create mode 100644 node_modules/es5-ext/test/array/to-array.js
create mode 100644 node_modules/es5-ext/test/array/valid-array.js
create mode 100644 node_modules/es5-ext/test/boolean/is-boolean.js
create mode 100644 node_modules/es5-ext/test/date/#/copy.js
create mode 100644 node_modules/es5-ext/test/date/#/days-in-month.js
create mode 100644 node_modules/es5-ext/test/date/#/floor-day.js
create mode 100644 node_modules/es5-ext/test/date/#/floor-month.js
create mode 100644 node_modules/es5-ext/test/date/#/floor-year.js
create mode 100644 node_modules/es5-ext/test/date/#/format.js
create mode 100644 node_modules/es5-ext/test/date/is-date.js
create mode 100644 node_modules/es5-ext/test/date/valid-date.js
create mode 100644 node_modules/es5-ext/test/error/#/throw.js
create mode 100644 node_modules/es5-ext/test/error/custom.js
create mode 100644 node_modules/es5-ext/test/error/is-error.js
create mode 100644 node_modules/es5-ext/test/error/valid-error.js
create mode 100644 node_modules/es5-ext/test/function/#/compose.js
create mode 100644 node_modules/es5-ext/test/function/#/copy.js
create mode 100644 node_modules/es5-ext/test/function/#/curry.js
create mode 100644 node_modules/es5-ext/test/function/#/lock.js
create mode 100644 node_modules/es5-ext/test/function/#/not.js
create mode 100644 node_modules/es5-ext/test/function/#/partial.js
create mode 100644 node_modules/es5-ext/test/function/#/spread.js
create mode 100644 node_modules/es5-ext/test/function/#/to-string-tokens.js
create mode 100644 node_modules/es5-ext/test/function/_define-length.js
create mode 100644 node_modules/es5-ext/test/function/constant.js
create mode 100644 node_modules/es5-ext/test/function/identity.js
create mode 100644 node_modules/es5-ext/test/function/invoke.js
create mode 100644 node_modules/es5-ext/test/function/is-arguments.js
create mode 100644 node_modules/es5-ext/test/function/is-function.js
create mode 100644 node_modules/es5-ext/test/function/noop.js
create mode 100644 node_modules/es5-ext/test/function/pluck.js
create mode 100644 node_modules/es5-ext/test/function/valid-function.js
create mode 100644 node_modules/es5-ext/test/global.js
create mode 100644 node_modules/es5-ext/test/iterable/for-each.js
create mode 100644 node_modules/es5-ext/test/iterable/is.js
create mode 100644 node_modules/es5-ext/test/iterable/validate-object.js
create mode 100644 node_modules/es5-ext/test/iterable/validate.js
create mode 100644 node_modules/es5-ext/test/json/safe-stringify.js
create mode 100644 node_modules/es5-ext/test/math/_pack-ieee754.js
create mode 100644 node_modules/es5-ext/test/math/_unpack-ieee754.js
create mode 100644 node_modules/es5-ext/test/math/acosh/implement.js
create mode 100644 node_modules/es5-ext/test/math/acosh/index.js
create mode 100644 node_modules/es5-ext/test/math/acosh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/acosh/shim.js
create mode 100644 node_modules/es5-ext/test/math/asinh/implement.js
create mode 100644 node_modules/es5-ext/test/math/asinh/index.js
create mode 100644 node_modules/es5-ext/test/math/asinh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/asinh/shim.js
create mode 100644 node_modules/es5-ext/test/math/atanh/implement.js
create mode 100644 node_modules/es5-ext/test/math/atanh/index.js
create mode 100644 node_modules/es5-ext/test/math/atanh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/atanh/shim.js
create mode 100644 node_modules/es5-ext/test/math/cbrt/implement.js
create mode 100644 node_modules/es5-ext/test/math/cbrt/index.js
create mode 100644 node_modules/es5-ext/test/math/cbrt/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/cbrt/shim.js
create mode 100644 node_modules/es5-ext/test/math/clz32/implement.js
create mode 100644 node_modules/es5-ext/test/math/clz32/index.js
create mode 100644 node_modules/es5-ext/test/math/clz32/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/clz32/shim.js
create mode 100644 node_modules/es5-ext/test/math/cosh/implement.js
create mode 100644 node_modules/es5-ext/test/math/cosh/index.js
create mode 100644 node_modules/es5-ext/test/math/cosh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/cosh/shim.js
create mode 100644 node_modules/es5-ext/test/math/expm1/implement.js
create mode 100644 node_modules/es5-ext/test/math/expm1/index.js
create mode 100644 node_modules/es5-ext/test/math/expm1/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/expm1/shim.js
create mode 100644 node_modules/es5-ext/test/math/fround/implement.js
create mode 100644 node_modules/es5-ext/test/math/fround/index.js
create mode 100644 node_modules/es5-ext/test/math/fround/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/fround/shim.js
create mode 100644 node_modules/es5-ext/test/math/hypot/implement.js
create mode 100644 node_modules/es5-ext/test/math/hypot/index.js
create mode 100644 node_modules/es5-ext/test/math/hypot/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/hypot/shim.js
create mode 100644 node_modules/es5-ext/test/math/imul/implement.js
create mode 100644 node_modules/es5-ext/test/math/imul/index.js
create mode 100644 node_modules/es5-ext/test/math/imul/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/imul/shim.js
create mode 100644 node_modules/es5-ext/test/math/log10/implement.js
create mode 100644 node_modules/es5-ext/test/math/log10/index.js
create mode 100644 node_modules/es5-ext/test/math/log10/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/log10/shim.js
create mode 100644 node_modules/es5-ext/test/math/log1p/implement.js
create mode 100644 node_modules/es5-ext/test/math/log1p/index.js
create mode 100644 node_modules/es5-ext/test/math/log1p/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/log1p/shim.js
create mode 100644 node_modules/es5-ext/test/math/log2/implement.js
create mode 100644 node_modules/es5-ext/test/math/log2/index.js
create mode 100644 node_modules/es5-ext/test/math/log2/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/log2/shim.js
create mode 100644 node_modules/es5-ext/test/math/sign/implement.js
create mode 100644 node_modules/es5-ext/test/math/sign/index.js
create mode 100644 node_modules/es5-ext/test/math/sign/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/sign/shim.js
create mode 100644 node_modules/es5-ext/test/math/sinh/implement.js
create mode 100644 node_modules/es5-ext/test/math/sinh/index.js
create mode 100644 node_modules/es5-ext/test/math/sinh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/sinh/shim.js
create mode 100644 node_modules/es5-ext/test/math/tanh/implement.js
create mode 100644 node_modules/es5-ext/test/math/tanh/index.js
create mode 100644 node_modules/es5-ext/test/math/tanh/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/tanh/shim.js
create mode 100644 node_modules/es5-ext/test/math/trunc/implement.js
create mode 100644 node_modules/es5-ext/test/math/trunc/index.js
create mode 100644 node_modules/es5-ext/test/math/trunc/is-implemented.js
create mode 100644 node_modules/es5-ext/test/math/trunc/shim.js
create mode 100644 node_modules/es5-ext/test/number/#/pad.js
create mode 100644 node_modules/es5-ext/test/number/epsilon/implement.js
create mode 100644 node_modules/es5-ext/test/number/epsilon/index.js
create mode 100644 node_modules/es5-ext/test/number/epsilon/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/is-finite/implement.js
create mode 100644 node_modules/es5-ext/test/number/is-finite/index.js
create mode 100644 node_modules/es5-ext/test/number/is-finite/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/is-finite/shim.js
create mode 100644 node_modules/es5-ext/test/number/is-integer/implement.js
create mode 100644 node_modules/es5-ext/test/number/is-integer/index.js
create mode 100644 node_modules/es5-ext/test/number/is-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/is-integer/shim.js
create mode 100644 node_modules/es5-ext/test/number/is-nan/implement.js
create mode 100644 node_modules/es5-ext/test/number/is-nan/index.js
create mode 100644 node_modules/es5-ext/test/number/is-nan/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/is-nan/shim.js
create mode 100644 node_modules/es5-ext/test/number/is-natural.js
create mode 100644 node_modules/es5-ext/test/number/is-number.js
create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/index.js
create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/is-safe-integer/shim.js
create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/index.js
create mode 100644 node_modules/es5-ext/test/number/max-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/implement.js
create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/index.js
create mode 100644 node_modules/es5-ext/test/number/min-safe-integer/is-implemented.js
create mode 100644 node_modules/es5-ext/test/number/to-integer.js
create mode 100644 node_modules/es5-ext/test/number/to-pos-integer.js
create mode 100644 node_modules/es5-ext/test/number/to-uint32.js
create mode 100644 node_modules/es5-ext/test/object/_iterate.js
create mode 100644 node_modules/es5-ext/test/object/assign/implement.js
create mode 100644 node_modules/es5-ext/test/object/assign/index.js
create mode 100644 node_modules/es5-ext/test/object/assign/is-implemented.js
create mode 100644 node_modules/es5-ext/test/object/assign/shim.js
create mode 100644 node_modules/es5-ext/test/object/clear.js
create mode 100644 node_modules/es5-ext/test/object/compact.js
create mode 100644 node_modules/es5-ext/test/object/compare.js
create mode 100644 node_modules/es5-ext/test/object/copy-deep.js
create mode 100644 node_modules/es5-ext/test/object/copy.js
create mode 100644 node_modules/es5-ext/test/object/count.js
create mode 100644 node_modules/es5-ext/test/object/create.js
create mode 100644 node_modules/es5-ext/test/object/ensure-natural-number-value.js
create mode 100644 node_modules/es5-ext/test/object/ensure-natural-number.js
create mode 100644 node_modules/es5-ext/test/object/eq.js
create mode 100644 node_modules/es5-ext/test/object/every.js
create mode 100644 node_modules/es5-ext/test/object/filter.js
create mode 100644 node_modules/es5-ext/test/object/find-key.js
create mode 100644 node_modules/es5-ext/test/object/find.js
create mode 100644 node_modules/es5-ext/test/object/first-key.js
create mode 100644 node_modules/es5-ext/test/object/flatten.js
create mode 100644 node_modules/es5-ext/test/object/for-each.js
create mode 100644 node_modules/es5-ext/test/object/get-property-names.js
create mode 100644 node_modules/es5-ext/test/object/is-array-like.js
create mode 100644 node_modules/es5-ext/test/object/is-callable.js
create mode 100644 node_modules/es5-ext/test/object/is-copy-deep.js
create mode 100644 node_modules/es5-ext/test/object/is-copy.js
create mode 100644 node_modules/es5-ext/test/object/is-empty.js
create mode 100644 node_modules/es5-ext/test/object/is-number-value.js
create mode 100644 node_modules/es5-ext/test/object/is-object.js
create mode 100644 node_modules/es5-ext/test/object/is-plain-object.js
create mode 100644 node_modules/es5-ext/test/object/is-value.js
create mode 100644 node_modules/es5-ext/test/object/is.js
create mode 100644 node_modules/es5-ext/test/object/key-of.js
create mode 100644 node_modules/es5-ext/test/object/keys/implement.js
create mode 100644 node_modules/es5-ext/test/object/keys/index.js
create mode 100644 node_modules/es5-ext/test/object/keys/is-implemented.js
create mode 100644 node_modules/es5-ext/test/object/keys/shim.js
create mode 100644 node_modules/es5-ext/test/object/map-keys.js
create mode 100644 node_modules/es5-ext/test/object/map.js
create mode 100644 node_modules/es5-ext/test/object/mixin-prototypes.js
create mode 100644 node_modules/es5-ext/test/object/mixin.js
create mode 100644 node_modules/es5-ext/test/object/normalize-options.js
create mode 100644 node_modules/es5-ext/test/object/primitive-set.js
create mode 100644 node_modules/es5-ext/test/object/safe-traverse.js
create mode 100644 node_modules/es5-ext/test/object/serialize.js
create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/implement.js
create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/index.js
create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/is-implemented.js
create mode 100644 node_modules/es5-ext/test/object/set-prototype-of/shim.js
create mode 100644 node_modules/es5-ext/test/object/some.js
create mode 100644 node_modules/es5-ext/test/object/to-array.js
create mode 100644 node_modules/es5-ext/test/object/unserialize.js
create mode 100644 node_modules/es5-ext/test/object/valid-callable.js
create mode 100644 node_modules/es5-ext/test/object/valid-object.js
create mode 100644 node_modules/es5-ext/test/object/valid-value.js
create mode 100644 node_modules/es5-ext/test/object/validate-array-like-object.js
create mode 100644 node_modules/es5-ext/test/object/validate-array-like.js
create mode 100644 node_modules/es5-ext/test/object/validate-stringifiable-value.js
create mode 100644 node_modules/es5-ext/test/object/validate-stringifiable.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/index.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/is-sticky.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/is-unicode.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/index.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/match/shim.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/index.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/replace/shim.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/index.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/search/shim.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/index.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/split/shim.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/sticky/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/sticky/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/unicode/implement.js
create mode 100644 node_modules/es5-ext/test/reg-exp/#/unicode/is-implemented.js
create mode 100644 node_modules/es5-ext/test/reg-exp/escape.js
create mode 100644 node_modules/es5-ext/test/reg-exp/is-reg-exp.js
create mode 100644 node_modules/es5-ext/test/reg-exp/valid-reg-exp.js
create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/index.js
create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/@@iterator/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/at.js
create mode 100644 node_modules/es5-ext/test/string/#/camel-to-hyphen.js
create mode 100644 node_modules/es5-ext/test/string/#/capitalize.js
create mode 100644 node_modules/es5-ext/test/string/#/case-insensitive-compare.js
create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/index.js
create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/code-point-at/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/contains/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/contains/index.js
create mode 100644 node_modules/es5-ext/test/string/#/contains/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/contains/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/ends-with/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/ends-with/index.js
create mode 100644 node_modules/es5-ext/test/string/#/ends-with/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/ends-with/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/hyphen-to-camel.js
create mode 100644 node_modules/es5-ext/test/string/#/indent.js
create mode 100644 node_modules/es5-ext/test/string/#/last.js
create mode 100644 node_modules/es5-ext/test/string/#/normalize/_data.js
create mode 100644 node_modules/es5-ext/test/string/#/normalize/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/normalize/index.js
create mode 100644 node_modules/es5-ext/test/string/#/normalize/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/normalize/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/pad.js
create mode 100644 node_modules/es5-ext/test/string/#/plain-replace-all.js
create mode 100644 node_modules/es5-ext/test/string/#/plain-replace.js
create mode 100644 node_modules/es5-ext/test/string/#/repeat/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/repeat/index.js
create mode 100644 node_modules/es5-ext/test/string/#/repeat/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/repeat/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/starts-with/implement.js
create mode 100644 node_modules/es5-ext/test/string/#/starts-with/index.js
create mode 100644 node_modules/es5-ext/test/string/#/starts-with/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/#/starts-with/shim.js
create mode 100644 node_modules/es5-ext/test/string/#/uncapitalize.js
create mode 100644 node_modules/es5-ext/test/string/format-method.js
create mode 100644 node_modules/es5-ext/test/string/from-code-point/implement.js
create mode 100644 node_modules/es5-ext/test/string/from-code-point/index.js
create mode 100644 node_modules/es5-ext/test/string/from-code-point/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/from-code-point/shim.js
create mode 100644 node_modules/es5-ext/test/string/is-string.js
create mode 100644 node_modules/es5-ext/test/string/random-uniq.js
create mode 100644 node_modules/es5-ext/test/string/raw/implement.js
create mode 100644 node_modules/es5-ext/test/string/raw/index.js
create mode 100644 node_modules/es5-ext/test/string/raw/is-implemented.js
create mode 100644 node_modules/es5-ext/test/string/raw/shim.js
create mode 100644 node_modules/es6-iterator/#/chain.js
create mode 100644 node_modules/es6-iterator/.lint
create mode 100644 node_modules/es6-iterator/.npmignore
create mode 100644 node_modules/es6-iterator/.travis.yml
create mode 100644 node_modules/es6-iterator/CHANGES
create mode 100644 node_modules/es6-iterator/LICENSE
create mode 100644 node_modules/es6-iterator/README.md
create mode 100644 node_modules/es6-iterator/array.js
create mode 100644 node_modules/es6-iterator/for-of.js
create mode 100644 node_modules/es6-iterator/get.js
create mode 100644 node_modules/es6-iterator/index.js
create mode 100644 node_modules/es6-iterator/is-iterable.js
create mode 100644 node_modules/es6-iterator/package.json
create mode 100644 node_modules/es6-iterator/string.js
create mode 100644 node_modules/es6-iterator/test/#/chain.js
create mode 100644 node_modules/es6-iterator/test/array.js
create mode 100644 node_modules/es6-iterator/test/for-of.js
create mode 100644 node_modules/es6-iterator/test/get.js
create mode 100644 node_modules/es6-iterator/test/index.js
create mode 100644 node_modules/es6-iterator/test/is-iterable.js
create mode 100644 node_modules/es6-iterator/test/string.js
create mode 100644 node_modules/es6-iterator/test/valid-iterable.js
create mode 100644 node_modules/es6-iterator/valid-iterable.js
create mode 100644 node_modules/es6-symbol/.lint
create mode 100644 node_modules/es6-symbol/.npmignore
create mode 100644 node_modules/es6-symbol/.travis.yml
create mode 100644 node_modules/es6-symbol/CHANGES
create mode 100644 node_modules/es6-symbol/LICENSE
create mode 100644 node_modules/es6-symbol/README.md
create mode 100644 node_modules/es6-symbol/implement.js
create mode 100644 node_modules/es6-symbol/index.js
create mode 100644 node_modules/es6-symbol/is-implemented.js
create mode 100644 node_modules/es6-symbol/is-native-implemented.js
create mode 100644 node_modules/es6-symbol/is-symbol.js
create mode 100644 node_modules/es6-symbol/package.json
create mode 100644 node_modules/es6-symbol/polyfill.js
create mode 100644 node_modules/es6-symbol/test/implement.js
create mode 100644 node_modules/es6-symbol/test/index.js
create mode 100644 node_modules/es6-symbol/test/is-implemented.js
create mode 100644 node_modules/es6-symbol/test/is-native-implemented.js
create mode 100644 node_modules/es6-symbol/test/is-symbol.js
create mode 100644 node_modules/es6-symbol/test/polyfill.js
create mode 100644 node_modules/es6-symbol/test/validate-symbol.js
create mode 100644 node_modules/es6-symbol/validate-symbol.js
create mode 100644 node_modules/es6-weak-map/.lint
create mode 100644 node_modules/es6-weak-map/.npmignore
create mode 100644 node_modules/es6-weak-map/.travis.yml
create mode 100644 node_modules/es6-weak-map/CHANGES
create mode 100644 node_modules/es6-weak-map/LICENSE
create mode 100644 node_modules/es6-weak-map/README.md
create mode 100644 node_modules/es6-weak-map/implement.js
create mode 100644 node_modules/es6-weak-map/index.js
create mode 100644 node_modules/es6-weak-map/is-implemented.js
create mode 100644 node_modules/es6-weak-map/is-native-implemented.js
create mode 100644 node_modules/es6-weak-map/is-weak-map.js
create mode 100644 node_modules/es6-weak-map/package.json
create mode 100644 node_modules/es6-weak-map/polyfill.js
create mode 100644 node_modules/es6-weak-map/test/implement.js
create mode 100644 node_modules/es6-weak-map/test/index.js
create mode 100644 node_modules/es6-weak-map/test/is-implemented.js
create mode 100644 node_modules/es6-weak-map/test/is-native-implemented.js
create mode 100644 node_modules/es6-weak-map/test/is-weak-map.js
create mode 100644 node_modules/es6-weak-map/test/polyfill.js
create mode 100644 node_modules/es6-weak-map/test/valid-weak-map.js
create mode 100644 node_modules/es6-weak-map/valid-weak-map.js
create mode 100644 node_modules/escape-html/LICENSE
create mode 100644 node_modules/escape-html/Readme.md
create mode 100644 node_modules/escape-html/index.js
create mode 100644 node_modules/escape-html/package.json
create mode 100644 node_modules/escape-string-regexp/index.js
create mode 100644 node_modules/escape-string-regexp/license
create mode 100644 node_modules/escape-string-regexp/package.json
create mode 100644 node_modules/escape-string-regexp/readme.md
create mode 100644 node_modules/etag/HISTORY.md
create mode 100644 node_modules/etag/LICENSE
create mode 100644 node_modules/etag/README.md
create mode 100644 node_modules/etag/index.js
create mode 100644 node_modules/etag/package.json
create mode 100644 node_modules/event-emitter/.lint
create mode 100644 node_modules/event-emitter/.npmignore
create mode 100644 node_modules/event-emitter/.testignore
create mode 100644 node_modules/event-emitter/.travis.yml
create mode 100644 node_modules/event-emitter/CHANGES
create mode 100644 node_modules/event-emitter/LICENSE
create mode 100644 node_modules/event-emitter/README.md
create mode 100644 node_modules/event-emitter/all-off.js
create mode 100644 node_modules/event-emitter/benchmark/many-on.js
create mode 100644 node_modules/event-emitter/benchmark/single-on.js
create mode 100644 node_modules/event-emitter/emit-error.js
create mode 100644 node_modules/event-emitter/has-listeners.js
create mode 100644 node_modules/event-emitter/index.js
create mode 100644 node_modules/event-emitter/package.json
create mode 100644 node_modules/event-emitter/pipe.js
create mode 100644 node_modules/event-emitter/test/all-off.js
create mode 100644 node_modules/event-emitter/test/emit-error.js
create mode 100644 node_modules/event-emitter/test/has-listeners.js
create mode 100644 node_modules/event-emitter/test/index.js
create mode 100644 node_modules/event-emitter/test/pipe.js
create mode 100644 node_modules/event-emitter/test/unify.js
create mode 100644 node_modules/event-emitter/unify.js
create mode 100644 node_modules/expand-brackets/LICENSE
create mode 100644 node_modules/expand-brackets/README.md
create mode 100644 node_modules/expand-brackets/index.js
create mode 100644 node_modules/expand-brackets/package.json
create mode 100644 node_modules/expand-range/LICENSE
create mode 100644 node_modules/expand-range/README.md
create mode 100644 node_modules/expand-range/index.js
create mode 100644 node_modules/expand-range/package.json
create mode 100644 node_modules/expand-tilde/LICENSE
create mode 100644 node_modules/expand-tilde/index.js
create mode 100644 node_modules/expand-tilde/package.json
create mode 100644 node_modules/express/History.md
create mode 100644 node_modules/express/LICENSE
create mode 100644 node_modules/express/Readme.md
create mode 100644 node_modules/express/index.js
create mode 100644 node_modules/express/lib/application.js
create mode 100644 node_modules/express/lib/express.js
create mode 100644 node_modules/express/lib/middleware/init.js
create mode 100644 node_modules/express/lib/middleware/query.js
create mode 100644 node_modules/express/lib/request.js
create mode 100644 node_modules/express/lib/response.js
create mode 100644 node_modules/express/lib/router/index.js
create mode 100644 node_modules/express/lib/router/layer.js
create mode 100644 node_modules/express/lib/router/route.js
create mode 100644 node_modules/express/lib/utils.js
create mode 100644 node_modules/express/lib/view.js
create mode 100644 node_modules/express/node_modules/debug/.jshintrc
create mode 100644 node_modules/express/node_modules/debug/.npmignore
create mode 100644 node_modules/express/node_modules/debug/History.md
create mode 100644 node_modules/express/node_modules/debug/Makefile
create mode 100644 node_modules/express/node_modules/debug/Readme.md
create mode 100644 node_modules/express/node_modules/debug/bower.json
create mode 100644 node_modules/express/node_modules/debug/browser.js
create mode 100644 node_modules/express/node_modules/debug/component.json
create mode 100644 node_modules/express/node_modules/debug/debug.js
create mode 100644 node_modules/express/node_modules/debug/node.js
create mode 100644 node_modules/express/node_modules/debug/package.json
create mode 100644 node_modules/express/node_modules/ms/.npmignore
create mode 100644 node_modules/express/node_modules/ms/History.md
create mode 100644 node_modules/express/node_modules/ms/LICENSE
create mode 100644 node_modules/express/node_modules/ms/README.md
create mode 100644 node_modules/express/node_modules/ms/index.js
create mode 100644 node_modules/express/node_modules/ms/package.json
create mode 100644 node_modules/express/node_modules/qs/.eslintignore
create mode 100644 node_modules/express/node_modules/qs/.eslintrc
create mode 100644 node_modules/express/node_modules/qs/.jscs.json
create mode 100644 node_modules/express/node_modules/qs/CHANGELOG.md
create mode 100644 node_modules/express/node_modules/qs/CONTRIBUTING.md
create mode 100644 node_modules/express/node_modules/qs/LICENSE
create mode 100644 node_modules/express/node_modules/qs/dist/qs.js
create mode 100755 node_modules/express/node_modules/qs/lib/index.js
create mode 100755 node_modules/express/node_modules/qs/lib/parse.js
create mode 100755 node_modules/express/node_modules/qs/lib/stringify.js
create mode 100755 node_modules/express/node_modules/qs/lib/utils.js
create mode 100644 node_modules/express/node_modules/qs/package.json
create mode 100644 node_modules/express/node_modules/qs/test/index.js
create mode 100755 node_modules/express/node_modules/qs/test/parse.js
create mode 100755 node_modules/express/node_modules/qs/test/stringify.js
create mode 100755 node_modules/express/node_modules/qs/test/utils.js
create mode 100644 node_modules/express/package.json
create mode 100644 node_modules/extend/.eslintrc
create mode 100644 node_modules/extend/.jscs.json
create mode 100644 node_modules/extend/.npmignore
create mode 100644 node_modules/extend/.travis.yml
create mode 100644 node_modules/extend/CHANGELOG.md
create mode 100644 node_modules/extend/LICENSE
create mode 100644 node_modules/extend/README.md
create mode 100644 node_modules/extend/component.json
create mode 100644 node_modules/extend/index.js
create mode 100644 node_modules/extend/package.json
create mode 100644 node_modules/extglob/LICENSE
create mode 100644 node_modules/extglob/README.md
create mode 100644 node_modules/extglob/index.js
create mode 100644 node_modules/extglob/package.json
create mode 100644 node_modules/fancy-log/LICENSE
create mode 100644 node_modules/fancy-log/README.md
create mode 100644 node_modules/fancy-log/index.js
create mode 100644 node_modules/fancy-log/package.json
create mode 100644 node_modules/filename-regex/README.md
create mode 100644 node_modules/filename-regex/index.js
create mode 100644 node_modules/filename-regex/package.json
create mode 100755 node_modules/fill-range/LICENSE
create mode 100755 node_modules/fill-range/README.md
create mode 100644 node_modules/fill-range/index.js
create mode 100644 node_modules/fill-range/package.json
create mode 100644 node_modules/finalhandler/HISTORY.md
create mode 100644 node_modules/finalhandler/LICENSE
create mode 100644 node_modules/finalhandler/README.md
create mode 100644 node_modules/finalhandler/index.js
create mode 100644 node_modules/finalhandler/node_modules/debug/.jshintrc
create mode 100644 node_modules/finalhandler/node_modules/debug/.npmignore
create mode 100644 node_modules/finalhandler/node_modules/debug/History.md
create mode 100644 node_modules/finalhandler/node_modules/debug/Makefile
create mode 100644 node_modules/finalhandler/node_modules/debug/Readme.md
create mode 100644 node_modules/finalhandler/node_modules/debug/bower.json
create mode 100644 node_modules/finalhandler/node_modules/debug/browser.js
create mode 100644 node_modules/finalhandler/node_modules/debug/component.json
create mode 100644 node_modules/finalhandler/node_modules/debug/debug.js
create mode 100644 node_modules/finalhandler/node_modules/debug/node.js
create mode 100644 node_modules/finalhandler/node_modules/debug/package.json
create mode 100644 node_modules/finalhandler/node_modules/ms/.npmignore
create mode 100644 node_modules/finalhandler/node_modules/ms/History.md
create mode 100644 node_modules/finalhandler/node_modules/ms/LICENSE
create mode 100644 node_modules/finalhandler/node_modules/ms/README.md
create mode 100644 node_modules/finalhandler/node_modules/ms/index.js
create mode 100644 node_modules/finalhandler/node_modules/ms/package.json
create mode 100644 node_modules/finalhandler/package.json
create mode 100644 node_modules/find-index/README.md
create mode 100644 node_modules/find-index/index.js
create mode 100644 node_modules/find-index/last.js
create mode 100644 node_modules/find-index/package.json
create mode 100644 node_modules/find-up/index.js
create mode 100644 node_modules/find-up/license
create mode 100644 node_modules/find-up/package.json
create mode 100644 node_modules/find-up/readme.md
create mode 100644 node_modules/findup-sync/README.md
create mode 100644 node_modules/findup-sync/index.js
create mode 100644 node_modules/findup-sync/package.json
create mode 100644 node_modules/fined/LICENSE
create mode 100644 node_modules/fined/README.md
create mode 100644 node_modules/fined/index.js
create mode 100644 node_modules/fined/package.json
create mode 100644 node_modules/first-chunk-stream/index.js
create mode 100644 node_modules/first-chunk-stream/package.json
create mode 100644 node_modules/first-chunk-stream/readme.md
create mode 100644 node_modules/flagged-respawn/.npmignore
create mode 100644 node_modules/flagged-respawn/.travis.yml
create mode 100644 node_modules/flagged-respawn/LICENSE
create mode 100644 node_modules/flagged-respawn/README.md
create mode 100644 node_modules/flagged-respawn/index.js
create mode 100644 node_modules/flagged-respawn/lib/reorder.js
create mode 100644 node_modules/flagged-respawn/lib/respawn.js
create mode 100644 node_modules/flagged-respawn/package.json
create mode 100644 node_modules/flagged-respawn/test/bin/exit_code.js
create mode 100644 node_modules/flagged-respawn/test/bin/respawner.js
create mode 100644 node_modules/flagged-respawn/test/bin/signal.js
create mode 100644 node_modules/flagged-respawn/test/index.js
create mode 100644 node_modules/for-in/LICENSE
create mode 100644 node_modules/for-in/README.md
create mode 100644 node_modules/for-in/index.js
create mode 100644 node_modules/for-in/package.json
create mode 100644 node_modules/for-own/LICENSE
create mode 100644 node_modules/for-own/README.md
create mode 100644 node_modules/for-own/index.js
create mode 100644 node_modules/for-own/package.json
create mode 100644 node_modules/forwarded/HISTORY.md
create mode 100644 node_modules/forwarded/LICENSE
create mode 100644 node_modules/forwarded/README.md
create mode 100644 node_modules/forwarded/index.js
create mode 100644 node_modules/forwarded/package.json
create mode 100644 node_modules/fresh/HISTORY.md
create mode 100644 node_modules/fresh/LICENSE
create mode 100644 node_modules/fresh/README.md
create mode 100644 node_modules/fresh/index.js
create mode 100644 node_modules/fresh/package.json
create mode 100644 node_modules/fs-exists-sync/LICENSE
create mode 100644 node_modules/fs-exists-sync/README.md
create mode 100644 node_modules/fs-exists-sync/index.js
create mode 100644 node_modules/fs-exists-sync/package.json
create mode 100644 node_modules/fs-extra/.npmignore
create mode 100644 node_modules/fs-extra/CHANGELOG.md
create mode 100644 node_modules/fs-extra/LICENSE
create mode 100644 node_modules/fs-extra/README.md
create mode 100644 node_modules/fs-extra/docs/copy-sync.md
create mode 100644 node_modules/fs-extra/docs/copy.md
create mode 100644 node_modules/fs-extra/docs/emptyDir-sync.md
create mode 100644 node_modules/fs-extra/docs/emptyDir.md
create mode 100644 node_modules/fs-extra/docs/ensureDir-sync.md
create mode 100644 node_modules/fs-extra/docs/ensureDir.md
create mode 100644 node_modules/fs-extra/docs/ensureFile-sync.md
create mode 100644 node_modules/fs-extra/docs/ensureFile.md
create mode 100644 node_modules/fs-extra/docs/ensureLink-sync.md
create mode 100644 node_modules/fs-extra/docs/ensureLink.md
create mode 100644 node_modules/fs-extra/docs/ensureSymlink-sync.md
create mode 100644 node_modules/fs-extra/docs/ensureSymlink.md
create mode 100644 node_modules/fs-extra/docs/move-sync.md
create mode 100644 node_modules/fs-extra/docs/move.md
create mode 100644 node_modules/fs-extra/docs/outputFile-sync.md
create mode 100644 node_modules/fs-extra/docs/outputFile.md
create mode 100644 node_modules/fs-extra/docs/outputJson-sync.md
create mode 100644 node_modules/fs-extra/docs/outputJson.md
create mode 100644 node_modules/fs-extra/docs/readJson-sync.md
create mode 100644 node_modules/fs-extra/docs/readJson.md
create mode 100644 node_modules/fs-extra/docs/remove-sync.md
create mode 100644 node_modules/fs-extra/docs/remove.md
create mode 100644 node_modules/fs-extra/docs/writeJson-sync.md
create mode 100644 node_modules/fs-extra/docs/writeJson.md
create mode 100644 node_modules/fs-extra/lib/copy-sync/copy-file-sync.js
create mode 100644 node_modules/fs-extra/lib/copy-sync/copy-sync.js
create mode 100644 node_modules/fs-extra/lib/copy-sync/index.js
create mode 100644 node_modules/fs-extra/lib/copy/copy.js
create mode 100644 node_modules/fs-extra/lib/copy/index.js
create mode 100644 node_modules/fs-extra/lib/copy/ncp.js
create mode 100644 node_modules/fs-extra/lib/empty/index.js
create mode 100644 node_modules/fs-extra/lib/ensure/file.js
create mode 100644 node_modules/fs-extra/lib/ensure/index.js
create mode 100644 node_modules/fs-extra/lib/ensure/link.js
create mode 100644 node_modules/fs-extra/lib/ensure/symlink-paths.js
create mode 100644 node_modules/fs-extra/lib/ensure/symlink-type.js
create mode 100644 node_modules/fs-extra/lib/ensure/symlink.js
create mode 100644 node_modules/fs-extra/lib/index.js
create mode 100644 node_modules/fs-extra/lib/json/index.js
create mode 100644 node_modules/fs-extra/lib/json/jsonfile.js
create mode 100644 node_modules/fs-extra/lib/json/output-json-sync.js
create mode 100644 node_modules/fs-extra/lib/json/output-json.js
create mode 100644 node_modules/fs-extra/lib/mkdirs/index.js
create mode 100644 node_modules/fs-extra/lib/mkdirs/mkdirs-sync.js
create mode 100644 node_modules/fs-extra/lib/mkdirs/mkdirs.js
create mode 100644 node_modules/fs-extra/lib/mkdirs/win32.js
create mode 100644 node_modules/fs-extra/lib/move-sync/index.js
create mode 100644 node_modules/fs-extra/lib/move/index.js
create mode 100644 node_modules/fs-extra/lib/output/index.js
create mode 100644 node_modules/fs-extra/lib/remove/index.js
create mode 100644 node_modules/fs-extra/lib/remove/rimraf.js
create mode 100644 node_modules/fs-extra/lib/util/assign.js
create mode 100644 node_modules/fs-extra/lib/util/utimes.js
create mode 100644 node_modules/fs-extra/package.json
create mode 100644 node_modules/gaze/LICENSE-MIT
create mode 100644 node_modules/gaze/README.md
create mode 100644 node_modules/gaze/lib/gaze.js
create mode 100644 node_modules/gaze/lib/helper.js
create mode 100644 node_modules/gaze/package.json
create mode 100644 node_modules/generic-pool/.eslintrc.js
create mode 100644 node_modules/generic-pool/.npmignore
create mode 100644 node_modules/generic-pool/.travis.yml
create mode 100644 node_modules/generic-pool/CHANGELOG.md
create mode 100644 node_modules/generic-pool/Makefile
create mode 100644 node_modules/generic-pool/README.md
create mode 100644 node_modules/generic-pool/fabfile.py
create mode 100644 node_modules/generic-pool/lib/generic-pool.js
create mode 100644 node_modules/generic-pool/package.json
create mode 100644 node_modules/generic-pool/test/generic-pool.test.js
create mode 100644 node_modules/get-caller-file/README.md
create mode 100644 node_modules/get-caller-file/index.js
create mode 100644 node_modules/get-caller-file/package.json
create mode 100644 node_modules/glob-base/LICENSE
create mode 100644 node_modules/glob-base/README.md
create mode 100644 node_modules/glob-base/index.js
create mode 100644 node_modules/glob-base/package.json
create mode 100644 node_modules/glob-parent/.npmignore
create mode 100644 node_modules/glob-parent/.travis.yml
create mode 100644 node_modules/glob-parent/LICENSE
create mode 100644 node_modules/glob-parent/README.md
create mode 100644 node_modules/glob-parent/index.js
create mode 100644 node_modules/glob-parent/package.json
create mode 100644 node_modules/glob-parent/test.js
create mode 100755 node_modules/glob-stream/LICENSE
create mode 100644 node_modules/glob-stream/README.md
create mode 100644 node_modules/glob-stream/index.js
create mode 100644 node_modules/glob-stream/node_modules/isarray/README.md
create mode 100644 node_modules/glob-stream/node_modules/isarray/build/build.js
create mode 100644 node_modules/glob-stream/node_modules/isarray/component.json
create mode 100644 node_modules/glob-stream/node_modules/isarray/index.js
create mode 100644 node_modules/glob-stream/node_modules/isarray/package.json
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/.npmignore
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/LICENSE
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/README.md
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/duplex.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/lib/_stream_duplex.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/lib/_stream_passthrough.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/lib/_stream_readable.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/lib/_stream_transform.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/lib/_stream_writable.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/package.json
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/passthrough.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/readable.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/transform.js
create mode 100644 node_modules/glob-stream/node_modules/readable-stream/writable.js
create mode 100644 node_modules/glob-stream/node_modules/through2/.npmignore
create mode 100644 node_modules/glob-stream/node_modules/through2/LICENSE
create mode 100644 node_modules/glob-stream/node_modules/through2/README.md
create mode 100644 node_modules/glob-stream/node_modules/through2/package.json
create mode 100644 node_modules/glob-stream/node_modules/through2/through2.js
create mode 100644 node_modules/glob-stream/package.json
create mode 100644 node_modules/glob-watcher/.npmignore
create mode 100644 node_modules/glob-watcher/.travis.yml
create mode 100755 node_modules/glob-watcher/LICENSE
create mode 100644 node_modules/glob-watcher/README.md
create mode 100644 node_modules/glob-watcher/index.js
create mode 100644 node_modules/glob-watcher/package.json
create mode 100644 node_modules/glob-watcher/test/fixtures/test.coffee
create mode 100644 node_modules/glob-watcher/test/main.js
create mode 100644 node_modules/glob/LICENSE
create mode 100644 node_modules/glob/README.md
create mode 100644 node_modules/glob/common.js
create mode 100644 node_modules/glob/glob.js
create mode 100644 node_modules/glob/package.json
create mode 100644 node_modules/glob/sync.js
create mode 100755 node_modules/glob2base/LICENSE
create mode 100644 node_modules/glob2base/README.md
create mode 100644 node_modules/glob2base/index.js
create mode 100644 node_modules/glob2base/package.json
create mode 100644 node_modules/global-modules/LICENSE
create mode 100644 node_modules/global-modules/README.md
create mode 100644 node_modules/global-modules/index.js
create mode 100644 node_modules/global-modules/node_modules/is-windows/LICENSE
create mode 100644 node_modules/global-modules/node_modules/is-windows/index.js
create mode 100644 node_modules/global-modules/node_modules/is-windows/package.json
create mode 100644 node_modules/global-modules/package.json
create mode 100644 node_modules/global-prefix/LICENSE
create mode 100644 node_modules/global-prefix/README.md
create mode 100644 node_modules/global-prefix/index.js
create mode 100644 node_modules/global-prefix/node_modules/is-windows/LICENSE
create mode 100644 node_modules/global-prefix/node_modules/is-windows/index.js
create mode 100644 node_modules/global-prefix/node_modules/is-windows/package.json
create mode 100644 node_modules/global-prefix/package.json
create mode 100644 node_modules/globule/.jshintrc
create mode 100644 node_modules/globule/.npmignore
create mode 100644 node_modules/globule/.travis.yml
create mode 100644 node_modules/globule/Gruntfile.js
create mode 100644 node_modules/globule/LICENSE-MIT
create mode 100644 node_modules/globule/README.md
create mode 100644 node_modules/globule/lib/globule.js
create mode 100644 node_modules/globule/node_modules/glob/.npmignore
create mode 100644 node_modules/globule/node_modules/glob/.travis.yml
create mode 100644 node_modules/globule/node_modules/glob/LICENSE
create mode 100644 node_modules/globule/node_modules/glob/README.md
create mode 100644 node_modules/globule/node_modules/glob/examples/g.js
create mode 100644 node_modules/globule/node_modules/glob/examples/usr-local.js
create mode 100644 node_modules/globule/node_modules/glob/glob.js
create mode 100644 node_modules/globule/node_modules/glob/package.json
create mode 100644 node_modules/globule/node_modules/glob/test/00-setup.js
create mode 100644 node_modules/globule/node_modules/glob/test/bash-comparison.js
create mode 100644 node_modules/globule/node_modules/glob/test/bash-results.json
create mode 100644 node_modules/globule/node_modules/glob/test/cwd-test.js
create mode 100644 node_modules/globule/node_modules/glob/test/mark.js
create mode 100644 node_modules/globule/node_modules/glob/test/nocase-nomagic.js
create mode 100644 node_modules/globule/node_modules/glob/test/pause-resume.js
create mode 100644 node_modules/globule/node_modules/glob/test/root-nomount.js
create mode 100644 node_modules/globule/node_modules/glob/test/root.js
create mode 100644 node_modules/globule/node_modules/glob/test/zz-cleanup.js
create mode 100644 node_modules/globule/node_modules/graceful-fs/.npmignore
create mode 100644 node_modules/globule/node_modules/graceful-fs/LICENSE
create mode 100644 node_modules/globule/node_modules/graceful-fs/README.md
create mode 100644 node_modules/globule/node_modules/graceful-fs/graceful-fs.js
create mode 100644 node_modules/globule/node_modules/graceful-fs/package.json
create mode 100644 node_modules/globule/node_modules/graceful-fs/test/open.js
create mode 100644 node_modules/globule/node_modules/graceful-fs/test/ulimit.js
create mode 100644 node_modules/globule/node_modules/inherits/LICENSE
create mode 100644 node_modules/globule/node_modules/inherits/README.md
create mode 100644 node_modules/globule/node_modules/inherits/inherits.js
create mode 100644 node_modules/globule/node_modules/inherits/package.json
create mode 100644 node_modules/globule/node_modules/lodash/LICENSE.txt
create mode 100644 node_modules/globule/node_modules/lodash/README.md
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.compat.js
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.compat.min.js
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.js
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.min.js
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.underscore.js
create mode 100644 node_modules/globule/node_modules/lodash/dist/lodash.underscore.min.js
create mode 100644 node_modules/globule/node_modules/lodash/package.json
create mode 100644 node_modules/globule/node_modules/lru-cache/.npmignore
create mode 100644 node_modules/globule/node_modules/lru-cache/.travis.yml
create mode 100644 node_modules/globule/node_modules/lru-cache/CONTRIBUTORS
create mode 100644 node_modules/globule/node_modules/lru-cache/LICENSE
create mode 100644 node_modules/globule/node_modules/lru-cache/README.md
create mode 100644 node_modules/globule/node_modules/lru-cache/lib/lru-cache.js
create mode 100644 node_modules/globule/node_modules/lru-cache/package.json
create mode 100644 node_modules/globule/node_modules/lru-cache/test/basic.js
create mode 100644 node_modules/globule/node_modules/lru-cache/test/foreach.js
create mode 100644 node_modules/globule/node_modules/lru-cache/test/memory-leak.js
create mode 100644 node_modules/globule/node_modules/lru-cache/test/serialize.js
create mode 100644 node_modules/globule/node_modules/minimatch/.npmignore
create mode 100644 node_modules/globule/node_modules/minimatch/LICENSE
create mode 100644 node_modules/globule/node_modules/minimatch/README.md
create mode 100644 node_modules/globule/node_modules/minimatch/minimatch.js
create mode 100644 node_modules/globule/node_modules/minimatch/package.json
create mode 100644 node_modules/globule/node_modules/minimatch/test/basic.js
create mode 100644 node_modules/globule/node_modules/minimatch/test/brace-expand.js
create mode 100644 node_modules/globule/node_modules/minimatch/test/caching.js
create mode 100644 node_modules/globule/node_modules/minimatch/test/defaults.js
create mode 100644 node_modules/globule/node_modules/minimatch/test/extglob-ending-with-state-char.js
create mode 100644 node_modules/globule/package.json
create mode 100644 node_modules/globule/test/fixtures/expand/README.md
create mode 100644 node_modules/globule/test/fixtures/expand/css/baz.css
create mode 100644 node_modules/globule/test/fixtures/expand/css/qux.css
create mode 100644 node_modules/globule/test/fixtures/expand/deep/deep.txt
create mode 100644 node_modules/globule/test/fixtures/expand/deep/deeper/deeper.txt
create mode 100644 node_modules/globule/test/fixtures/expand/deep/deeper/deepest/deepest.txt
create mode 100644 node_modules/globule/test/fixtures/expand/js/bar.js
create mode 100644 node_modules/globule/test/fixtures/expand/js/foo.js
create mode 100644 node_modules/globule/test/globule_test.js
create mode 100644 node_modules/glogg/LICENSE
create mode 100644 node_modules/glogg/README.md
create mode 100644 node_modules/glogg/index.js
create mode 100644 node_modules/glogg/package.json
create mode 100644 node_modules/graceful-fs/LICENSE
create mode 100644 node_modules/graceful-fs/README.md
create mode 100644 node_modules/graceful-fs/fs.js
create mode 100644 node_modules/graceful-fs/graceful-fs.js
create mode 100644 node_modules/graceful-fs/legacy-streams.js
create mode 100644 node_modules/graceful-fs/package.json
create mode 100644 node_modules/graceful-fs/polyfills.js
create mode 100644 node_modules/graceful-readlink/.npmignore
create mode 100644 node_modules/graceful-readlink/.travis.yml
create mode 100644 node_modules/graceful-readlink/LICENSE
create mode 100644 node_modules/graceful-readlink/README.md
create mode 100644 node_modules/graceful-readlink/index.js
create mode 100644 node_modules/graceful-readlink/package.json
create mode 100644 node_modules/gulp-help/index.js
create mode 100644 node_modules/gulp-help/lib/attach-help.js
create mode 100644 node_modules/gulp-help/lib/calculate-margin.js
create mode 100644 node_modules/gulp-help/lib/noop.js
create mode 100644 node_modules/gulp-help/license
create mode 100644 node_modules/gulp-help/node_modules/object-assign/index.js
create mode 100644 node_modules/gulp-help/node_modules/object-assign/license
create mode 100644 node_modules/gulp-help/node_modules/object-assign/package.json
create mode 100644 node_modules/gulp-help/node_modules/object-assign/readme.md
create mode 100644 node_modules/gulp-help/package.json
create mode 100644 node_modules/gulp-help/readme.md
create mode 100755 node_modules/gulp-util/LICENSE
create mode 100644 node_modules/gulp-util/README.md
create mode 100644 node_modules/gulp-util/index.js
create mode 100644 node_modules/gulp-util/lib/PluginError.js
create mode 100644 node_modules/gulp-util/lib/buffer.js
create mode 100644 node_modules/gulp-util/lib/combine.js
create mode 100644 node_modules/gulp-util/lib/env.js
create mode 100644 node_modules/gulp-util/lib/isBuffer.js
create mode 100644 node_modules/gulp-util/lib/isNull.js
create mode 100644 node_modules/gulp-util/lib/isStream.js
create mode 100644 node_modules/gulp-util/lib/log.js
create mode 100644 node_modules/gulp-util/lib/noop.js
create mode 100644 node_modules/gulp-util/lib/template.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/.travis.yml
create mode 100644 node_modules/gulp-util/node_modules/minimist/LICENSE
create mode 100644 node_modules/gulp-util/node_modules/minimist/example/parse.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/index.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/package.json
create mode 100644 node_modules/gulp-util/node_modules/minimist/readme.markdown
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/all_bool.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/bool.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/dash.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/default_bool.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/dotted.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/kv_short.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/long.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/num.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/parse.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/parse_modified.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/short.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/stop_early.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/unknown.js
create mode 100644 node_modules/gulp-util/node_modules/minimist/test/whitespace.js
create mode 100644 node_modules/gulp-util/node_modules/object-assign/index.js
create mode 100644 node_modules/gulp-util/node_modules/object-assign/license
create mode 100644 node_modules/gulp-util/node_modules/object-assign/package.json
create mode 100644 node_modules/gulp-util/node_modules/object-assign/readme.md
create mode 100644 node_modules/gulp-util/package.json
create mode 100644 node_modules/gulp/CHANGELOG.md
create mode 100644 node_modules/gulp/LICENSE
create mode 100644 node_modules/gulp/README.md
create mode 100755 node_modules/gulp/bin/gulp.js
create mode 100644 node_modules/gulp/completion/README.md
create mode 100644 node_modules/gulp/completion/bash
create mode 100644 node_modules/gulp/completion/fish
create mode 100644 node_modules/gulp/completion/powershell
create mode 100644 node_modules/gulp/completion/zsh
create mode 100644 node_modules/gulp/gulp.1
create mode 100644 node_modules/gulp/index.js
create mode 100644 node_modules/gulp/lib/completion.js
create mode 100644 node_modules/gulp/lib/taskTree.js
create mode 100644 node_modules/gulp/node_modules/minimist/.travis.yml
create mode 100644 node_modules/gulp/node_modules/minimist/LICENSE
create mode 100644 node_modules/gulp/node_modules/minimist/example/parse.js
create mode 100644 node_modules/gulp/node_modules/minimist/index.js
create mode 100644 node_modules/gulp/node_modules/minimist/package.json
create mode 100644 node_modules/gulp/node_modules/minimist/readme.markdown
create mode 100644 node_modules/gulp/node_modules/minimist/test/all_bool.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/bool.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/dash.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/default_bool.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/dotted.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/kv_short.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/long.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/num.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/parse.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/parse_modified.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/short.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/stop_early.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/unknown.js
create mode 100644 node_modules/gulp/node_modules/minimist/test/whitespace.js
create mode 100644 node_modules/gulp/package.json
create mode 100644 node_modules/gulplog/CHANGELOG.md
create mode 100644 node_modules/gulplog/LICENSE
create mode 100644 node_modules/gulplog/README.md
create mode 100644 node_modules/gulplog/index.js
create mode 100644 node_modules/gulplog/package.json
create mode 100644 node_modules/has-ansi/index.js
create mode 100644 node_modules/has-ansi/license
create mode 100644 node_modules/has-ansi/package.json
create mode 100644 node_modules/has-ansi/readme.md
create mode 100644 node_modules/has-gulplog/LICENSE
create mode 100644 node_modules/has-gulplog/README.md
create mode 100644 node_modules/has-gulplog/index.js
create mode 100644 node_modules/has-gulplog/package.json
create mode 100644 node_modules/homedir-polyfill/LICENSE
create mode 100644 node_modules/homedir-polyfill/README.md
create mode 100644 node_modules/homedir-polyfill/index.js
create mode 100644 node_modules/homedir-polyfill/package.json
create mode 100644 node_modules/hosted-git-info/LICENSE
create mode 100644 node_modules/hosted-git-info/README.md
create mode 100644 node_modules/hosted-git-info/git-host-info.js
create mode 100644 node_modules/hosted-git-info/git-host.js
create mode 100644 node_modules/hosted-git-info/index.js
create mode 100644 node_modules/hosted-git-info/package.json
create mode 100644 node_modules/http-errors/HISTORY.md
create mode 100644 node_modules/http-errors/LICENSE
create mode 100644 node_modules/http-errors/README.md
create mode 100644 node_modules/http-errors/index.js
create mode 100644 node_modules/http-errors/package.json
create mode 100644 node_modules/iconv-lite/.npmignore
create mode 100644 node_modules/iconv-lite/.travis.yml
create mode 100644 node_modules/iconv-lite/Changelog.md
create mode 100644 node_modules/iconv-lite/LICENSE
create mode 100644 node_modules/iconv-lite/README.md
create mode 100644 node_modules/iconv-lite/encodings/dbcs-codec.js
create mode 100644 node_modules/iconv-lite/encodings/dbcs-data.js
create mode 100644 node_modules/iconv-lite/encodings/index.js
create mode 100644 node_modules/iconv-lite/encodings/internal.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-codec.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-data-generated.js
create mode 100644 node_modules/iconv-lite/encodings/sbcs-data.js
create mode 100644 node_modules/iconv-lite/encodings/tables/big5-added.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp936.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp949.json
create mode 100644 node_modules/iconv-lite/encodings/tables/cp950.json
create mode 100644 node_modules/iconv-lite/encodings/tables/eucjp.json
create mode 100644 node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
create mode 100644 node_modules/iconv-lite/encodings/tables/gbk-added.json
create mode 100644 node_modules/iconv-lite/encodings/tables/shiftjis.json
create mode 100644 node_modules/iconv-lite/encodings/utf16.js
create mode 100644 node_modules/iconv-lite/encodings/utf7.js
create mode 100644 node_modules/iconv-lite/lib/bom-handling.js
create mode 100644 node_modules/iconv-lite/lib/extend-node.js
create mode 100644 node_modules/iconv-lite/lib/index.d.ts
create mode 100644 node_modules/iconv-lite/lib/index.js
create mode 100644 node_modules/iconv-lite/lib/streams.js
create mode 100644 node_modules/iconv-lite/package.json
create mode 100644 node_modules/inflection/.npmignore
create mode 100644 node_modules/inflection/History.md
create mode 100644 node_modules/inflection/Readme.md
create mode 100644 node_modules/inflection/bower.json
create mode 100644 node_modules/inflection/component.json
create mode 100644 node_modules/inflection/inflection.min.js
create mode 100644 node_modules/inflection/lib/inflection.js
create mode 100644 node_modules/inflection/package.json
create mode 100644 node_modules/inflight/LICENSE
create mode 100644 node_modules/inflight/README.md
create mode 100644 node_modules/inflight/inflight.js
create mode 100644 node_modules/inflight/package.json
create mode 100644 node_modules/inherits/LICENSE
create mode 100644 node_modules/inherits/README.md
create mode 100644 node_modules/inherits/inherits.js
create mode 100644 node_modules/inherits/inherits_browser.js
create mode 100644 node_modules/inherits/package.json
create mode 100644 node_modules/ini/LICENSE
create mode 100644 node_modules/ini/README.md
create mode 100644 node_modules/ini/ini.js
create mode 100644 node_modules/ini/package.json
create mode 100644 node_modules/interpret/CHANGELOG
create mode 100644 node_modules/interpret/LICENSE
create mode 100644 node_modules/interpret/README.md
create mode 100644 node_modules/interpret/index.js
create mode 100644 node_modules/interpret/package.json
create mode 100644 node_modules/invert-kv/index.js
create mode 100644 node_modules/invert-kv/package.json
create mode 100644 node_modules/invert-kv/readme.md
create mode 100644 node_modules/ipaddr.js/.npmignore
create mode 100644 node_modules/ipaddr.js/.travis.yml
create mode 100644 node_modules/ipaddr.js/Cakefile
create mode 100644 node_modules/ipaddr.js/LICENSE
create mode 100644 node_modules/ipaddr.js/README.md
create mode 100644 node_modules/ipaddr.js/bower.json
create mode 100644 node_modules/ipaddr.js/ipaddr.min.js
create mode 100644 node_modules/ipaddr.js/lib/ipaddr.js
create mode 100644 node_modules/ipaddr.js/package.json
create mode 100644 node_modules/ipaddr.js/src/ipaddr.coffee
create mode 100644 node_modules/ipaddr.js/test/ipaddr.test.coffee
create mode 100644 node_modules/is-absolute/LICENSE
create mode 100644 node_modules/is-absolute/README.md
create mode 100644 node_modules/is-absolute/index.js
create mode 100644 node_modules/is-absolute/node_modules/is-windows/LICENSE
create mode 100644 node_modules/is-absolute/node_modules/is-windows/index.js
create mode 100644 node_modules/is-absolute/node_modules/is-windows/package.json
create mode 100644 node_modules/is-absolute/package.json
create mode 100644 node_modules/is-arrayish/.editorconfig
create mode 100644 node_modules/is-arrayish/.istanbul.yml
create mode 100644 node_modules/is-arrayish/.npmignore
create mode 100644 node_modules/is-arrayish/.travis.yml
create mode 100644 node_modules/is-arrayish/LICENSE
create mode 100644 node_modules/is-arrayish/README.md
create mode 100644 node_modules/is-arrayish/index.js
create mode 100644 node_modules/is-arrayish/package.json
create mode 100644 node_modules/is-buffer/.npmignore
create mode 100644 node_modules/is-buffer/LICENSE
create mode 100644 node_modules/is-buffer/README.md
create mode 100644 node_modules/is-buffer/index.js
create mode 100644 node_modules/is-buffer/package.json
create mode 100644 node_modules/is-buffer/test/basic.js
create mode 100644 node_modules/is-builtin-module/index.js
create mode 100644 node_modules/is-builtin-module/license
create mode 100644 node_modules/is-builtin-module/package.json
create mode 100644 node_modules/is-builtin-module/readme.md
create mode 100644 node_modules/is-dotfile/LICENSE
create mode 100644 node_modules/is-dotfile/README.md
create mode 100644 node_modules/is-dotfile/index.js
create mode 100644 node_modules/is-dotfile/package.json
create mode 100644 node_modules/is-equal-shallow/LICENSE
create mode 100644 node_modules/is-equal-shallow/README.md
create mode 100644 node_modules/is-equal-shallow/index.js
create mode 100644 node_modules/is-equal-shallow/package.json
create mode 100644 node_modules/is-extendable/LICENSE
create mode 100644 node_modules/is-extendable/README.md
create mode 100644 node_modules/is-extendable/index.js
create mode 100644 node_modules/is-extendable/package.json
create mode 100644 node_modules/is-extglob/LICENSE
create mode 100644 node_modules/is-extglob/README.md
create mode 100644 node_modules/is-extglob/index.js
create mode 100644 node_modules/is-extglob/package.json
create mode 100644 node_modules/is-fullwidth-code-point/index.js
create mode 100644 node_modules/is-fullwidth-code-point/license
create mode 100644 node_modules/is-fullwidth-code-point/package.json
create mode 100644 node_modules/is-fullwidth-code-point/readme.md
create mode 100644 node_modules/is-glob/LICENSE
create mode 100644 node_modules/is-glob/README.md
create mode 100644 node_modules/is-glob/index.js
create mode 100644 node_modules/is-glob/package.json
create mode 100644 node_modules/is-number/LICENSE
create mode 100644 node_modules/is-number/README.md
create mode 100644 node_modules/is-number/index.js
create mode 100644 node_modules/is-number/package.json
create mode 100644 node_modules/is-posix-bracket/LICENSE
create mode 100644 node_modules/is-posix-bracket/README.md
create mode 100644 node_modules/is-posix-bracket/index.js
create mode 100644 node_modules/is-posix-bracket/package.json
create mode 100644 node_modules/is-primitive/LICENSE
create mode 100644 node_modules/is-primitive/README.md
create mode 100644 node_modules/is-primitive/index.js
create mode 100644 node_modules/is-primitive/package.json
create mode 100644 node_modules/is-promise/.npmignore
create mode 100644 node_modules/is-promise/.travis.yml
create mode 100644 node_modules/is-promise/LICENSE
create mode 100644 node_modules/is-promise/index.js
create mode 100644 node_modules/is-promise/package.json
create mode 100644 node_modules/is-promise/readme.md
create mode 100644 node_modules/is-relative/LICENSE
create mode 100644 node_modules/is-relative/README.md
create mode 100644 node_modules/is-relative/index.js
create mode 100644 node_modules/is-relative/package.json
create mode 100644 node_modules/is-unc-path/LICENSE
create mode 100644 node_modules/is-unc-path/README.md
create mode 100644 node_modules/is-unc-path/index.js
create mode 100644 node_modules/is-unc-path/package.json
create mode 100644 node_modules/is-utf8/LICENSE
create mode 100644 node_modules/is-utf8/README.md
create mode 100644 node_modules/is-utf8/is-utf8.js
create mode 100644 node_modules/is-utf8/package.json
create mode 100644 node_modules/is-windows/LICENSE
create mode 100644 node_modules/is-windows/README.md
create mode 100644 node_modules/is-windows/index.js
create mode 100644 node_modules/is-windows/package.json
create mode 100644 node_modules/isarray/.npmignore
create mode 100644 node_modules/isarray/.travis.yml
create mode 100644 node_modules/isarray/Makefile
create mode 100644 node_modules/isarray/README.md
create mode 100644 node_modules/isarray/component.json
create mode 100644 node_modules/isarray/index.js
create mode 100644 node_modules/isarray/package.json
create mode 100644 node_modules/isarray/test.js
create mode 100644 node_modules/isexe/.npmignore
create mode 100644 node_modules/isexe/LICENSE
create mode 100644 node_modules/isexe/README.md
create mode 100644 node_modules/isexe/index.js
create mode 100644 node_modules/isexe/mode.js
create mode 100644 node_modules/isexe/package.json
create mode 100644 node_modules/isexe/test/basic.js
create mode 100644 node_modules/isexe/windows.js
create mode 100644 node_modules/isobject/LICENSE
create mode 100644 node_modules/isobject/README.md
create mode 100644 node_modules/isobject/index.js
create mode 100644 node_modules/isobject/package.json
create mode 100644 node_modules/jade/.npmignore
create mode 100644 node_modules/jade/.release.json
create mode 100644 node_modules/jade/History.md
create mode 100644 node_modules/jade/LICENSE
create mode 100644 node_modules/jade/README.md
create mode 100644 node_modules/jade/Readme_zh-cn.md
create mode 100755 node_modules/jade/bin/jade.js
create mode 100644 node_modules/jade/block-code.html
create mode 100644 node_modules/jade/component.json
create mode 100644 node_modules/jade/jade.js
create mode 100644 node_modules/jade/lib/compiler.js
create mode 100644 node_modules/jade/lib/doctypes.js
create mode 100644 node_modules/jade/lib/filters-client.js
create mode 100644 node_modules/jade/lib/filters.js
create mode 100644 node_modules/jade/lib/index.js
create mode 100644 node_modules/jade/lib/inline-tags.js
create mode 100644 node_modules/jade/lib/lexer.js
create mode 100644 node_modules/jade/lib/nodes/attrs.js
create mode 100644 node_modules/jade/lib/nodes/block-comment.js
create mode 100644 node_modules/jade/lib/nodes/block.js
create mode 100644 node_modules/jade/lib/nodes/case.js
create mode 100644 node_modules/jade/lib/nodes/code.js
create mode 100644 node_modules/jade/lib/nodes/comment.js
create mode 100644 node_modules/jade/lib/nodes/doctype.js
create mode 100644 node_modules/jade/lib/nodes/each.js
create mode 100644 node_modules/jade/lib/nodes/filter.js
create mode 100644 node_modules/jade/lib/nodes/index.js
create mode 100644 node_modules/jade/lib/nodes/literal.js
create mode 100644 node_modules/jade/lib/nodes/mixin-block.js
create mode 100644 node_modules/jade/lib/nodes/mixin.js
create mode 100644 node_modules/jade/lib/nodes/node.js
create mode 100644 node_modules/jade/lib/nodes/tag.js
create mode 100644 node_modules/jade/lib/nodes/text.js
create mode 100644 node_modules/jade/lib/parser.js
create mode 100644 node_modules/jade/lib/runtime.js
create mode 100644 node_modules/jade/lib/utils.js
create mode 100644 node_modules/jade/package.json
create mode 100644 node_modules/jade/release.js
create mode 100644 node_modules/jade/runtime.js
create mode 100644 node_modules/js-beautify/.codeclimate.yml
create mode 100644 node_modules/js-beautify/.jshintignore
create mode 100644 node_modules/js-beautify/.jshintrc
create mode 100644 node_modules/js-beautify/.npmignore
create mode 100644 node_modules/js-beautify/.travis.yml
create mode 100644 node_modules/js-beautify/CHANGELOG.md
create mode 100644 node_modules/js-beautify/CONTRIBUTING.md
create mode 100644 node_modules/js-beautify/ISSUE_TEMPLATE.md
create mode 100644 node_modules/js-beautify/LICENSE
create mode 100644 node_modules/js-beautify/README.md
create mode 100644 node_modules/js-beautify/appveyor.yml
create mode 100644 node_modules/js-beautify/bower.json
create mode 100755 node_modules/js-beautify/build
create mode 100755 node_modules/js-beautify/js/bin/css-beautify.js
create mode 100755 node_modules/js-beautify/js/bin/html-beautify.js
create mode 100755 node_modules/js-beautify/js/bin/js-beautify.js
create mode 100644 node_modules/js-beautify/js/config/defaults.json
create mode 100644 node_modules/js-beautify/js/index.js
create mode 100644 node_modules/js-beautify/js/lib/beautify-css.js
create mode 100644 node_modules/js-beautify/js/lib/beautify-html.js
create mode 100644 node_modules/js-beautify/js/lib/beautify.js
create mode 100755 node_modules/js-beautify/js/lib/cli.js
create mode 100644 node_modules/js-beautify/js/lib/unpackers/javascriptobfuscator_unpacker.js
create mode 100644 node_modules/js-beautify/js/lib/unpackers/myobfuscate_unpacker.js
create mode 100644 node_modules/js-beautify/js/lib/unpackers/p_a_c_k_e_r_unpacker.js
create mode 100644 node_modules/js-beautify/js/lib/unpackers/urlencode_unpacker.js
create mode 100755 node_modules/js-beautify/js/test/amd-beautify-tests.js
create mode 100644 node_modules/js-beautify/js/test/generated/beautify-css-tests.js
create mode 100644 node_modules/js-beautify/js/test/generated/beautify-html-tests.js
create mode 100644 node_modules/js-beautify/js/test/generated/beautify-javascript-tests.js
create mode 100644 node_modules/js-beautify/js/test/node-beautify-html-perf-tests.js
create mode 100644 node_modules/js-beautify/js/test/node-beautify-perf-tests.js
create mode 100755 node_modules/js-beautify/js/test/node-beautify-tests.js
create mode 100644 node_modules/js-beautify/js/test/requirejs-html-beautify.html
create mode 100644 node_modules/js-beautify/js/test/resources/configerror/.jsbeautifyrc
create mode 100644 node_modules/js-beautify/js/test/resources/configerror/subDir1/subDir2/empty.txt
create mode 100644 node_modules/js-beautify/js/test/resources/editorconfig/.editorconfig
create mode 100644 node_modules/js-beautify/js/test/resources/editorconfig/cr/.editorconfig
create mode 100644 node_modules/js-beautify/js/test/resources/editorconfig/crlf/.editorconfig
create mode 100644 node_modules/js-beautify/js/test/resources/editorconfig/error/.editorconfig
create mode 100644 node_modules/js-beautify/js/test/resources/editorconfig/example-base.js
create mode 100644 node_modules/js-beautify/js/test/resources/example1.js
create mode 100644 node_modules/js-beautify/js/test/resources/indent11chars/.jsbeautifyrc
create mode 100644 node_modules/js-beautify/js/test/resources/indent11chars/subDir1/subDir2/empty.txt
create mode 100755 node_modules/js-beautify/js/test/run-tests
create mode 100644 node_modules/js-beautify/js/test/sanitytest.js
create mode 100755 node_modules/js-beautify/js/test/shell-smoke-test.sh
create mode 100644 node_modules/js-beautify/jsbeautifyrc
create mode 100644 node_modules/js-beautify/package.json
create mode 100644 node_modules/js-beautify/test/data/css/node.mustache
create mode 100644 node_modules/js-beautify/test/data/css/python.mustache
create mode 100644 node_modules/js-beautify/test/data/css/tests.js
create mode 100644 node_modules/js-beautify/test/data/html/node.mustache
create mode 100644 node_modules/js-beautify/test/data/html/tests.js
create mode 100644 node_modules/js-beautify/test/data/javascript/inputlib.js
create mode 100644 node_modules/js-beautify/test/data/javascript/node.mustache
create mode 100644 node_modules/js-beautify/test/data/javascript/python.mustache
create mode 100644 node_modules/js-beautify/test/data/javascript/tests.js
create mode 100644 node_modules/js-beautify/test/generate-tests.js
create mode 100644 node_modules/js-beautify/test/resources/html-with-base64image.html
create mode 100644 node_modules/js-beautify/test/resources/underscore-min.js
create mode 100644 node_modules/js-beautify/test/resources/underscore.js
create mode 100755 node_modules/js-beautify/tools/build.sh
create mode 100755 node_modules/js-beautify/tools/generate-changelog.sh
create mode 100755 node_modules/js-beautify/tools/git-status-clear.sh
create mode 100755 node_modules/js-beautify/tools/release-all.sh
create mode 100644 node_modules/jsonfile/.npmignore
create mode 100644 node_modules/jsonfile/CHANGELOG.md
create mode 100644 node_modules/jsonfile/LICENSE
create mode 100644 node_modules/jsonfile/README.md
create mode 100644 node_modules/jsonfile/appveyor.yml
create mode 100644 node_modules/jsonfile/index.js
create mode 100644 node_modules/jsonfile/package.json
create mode 100644 node_modules/jstransformer/LICENSE
create mode 100644 node_modules/jstransformer/README.md
create mode 100644 node_modules/jstransformer/index.js
create mode 100644 node_modules/jstransformer/package.json
create mode 100644 node_modules/kind-of/LICENSE
create mode 100644 node_modules/kind-of/README.md
create mode 100644 node_modules/kind-of/index.js
create mode 100644 node_modules/kind-of/package.json
create mode 100644 node_modules/lazy-cache/LICENSE
create mode 100644 node_modules/lazy-cache/README.md
create mode 100644 node_modules/lazy-cache/index.js
create mode 100644 node_modules/lazy-cache/package.json
create mode 100644 node_modules/lcid/index.js
create mode 100644 node_modules/lcid/lcid.json
create mode 100644 node_modules/lcid/license
create mode 100644 node_modules/lcid/package.json
create mode 100644 node_modules/lcid/readme.md
create mode 100644 node_modules/liftoff/.jscsrc
create mode 100644 node_modules/liftoff/.jshintrc
create mode 100644 node_modules/liftoff/.npmignore
create mode 100644 node_modules/liftoff/.travis.yml
create mode 100644 node_modules/liftoff/CHANGELOG
create mode 100644 node_modules/liftoff/LICENSE
create mode 100644 node_modules/liftoff/README.md
create mode 100644 node_modules/liftoff/UPGRADING.md
create mode 100644 node_modules/liftoff/appveyor.yml
create mode 100644 node_modules/liftoff/index.js
create mode 100644 node_modules/liftoff/lib/build_config_name.js
create mode 100644 node_modules/liftoff/lib/file_search.js
create mode 100644 node_modules/liftoff/lib/find_config.js
create mode 100644 node_modules/liftoff/lib/find_cwd.js
create mode 100644 node_modules/liftoff/lib/parse_options.js
create mode 100644 node_modules/liftoff/lib/register_loader.js
create mode 100644 node_modules/liftoff/lib/silent_require.js
create mode 100644 node_modules/liftoff/package.json
create mode 100644 node_modules/load-json-file/index.js
create mode 100644 node_modules/load-json-file/license
create mode 100644 node_modules/load-json-file/node_modules/strip-bom/index.js
create mode 100644 node_modules/load-json-file/node_modules/strip-bom/license
create mode 100644 node_modules/load-json-file/node_modules/strip-bom/package.json
create mode 100644 node_modules/load-json-file/node_modules/strip-bom/readme.md
create mode 100644 node_modules/load-json-file/package.json
create mode 100644 node_modules/load-json-file/readme.md
create mode 100644 node_modules/lodash._basecopy/LICENSE.txt
create mode 100644 node_modules/lodash._basecopy/README.md
create mode 100644 node_modules/lodash._basecopy/index.js
create mode 100644 node_modules/lodash._basecopy/package.json
create mode 100644 node_modules/lodash._basetostring/LICENSE
create mode 100644 node_modules/lodash._basetostring/README.md
create mode 100644 node_modules/lodash._basetostring/index.js
create mode 100644 node_modules/lodash._basetostring/package.json
create mode 100644 node_modules/lodash._basevalues/LICENSE.txt
create mode 100644 node_modules/lodash._basevalues/README.md
create mode 100644 node_modules/lodash._basevalues/index.js
create mode 100644 node_modules/lodash._basevalues/package.json
create mode 100644 node_modules/lodash._getnative/LICENSE
create mode 100644 node_modules/lodash._getnative/README.md
create mode 100644 node_modules/lodash._getnative/index.js
create mode 100644 node_modules/lodash._getnative/package.json
create mode 100644 node_modules/lodash._isiterateecall/LICENSE.txt
create mode 100644 node_modules/lodash._isiterateecall/README.md
create mode 100644 node_modules/lodash._isiterateecall/index.js
create mode 100644 node_modules/lodash._isiterateecall/package.json
create mode 100644 node_modules/lodash._reescape/LICENSE.txt
create mode 100644 node_modules/lodash._reescape/README.md
create mode 100644 node_modules/lodash._reescape/index.js
create mode 100644 node_modules/lodash._reescape/package.json
create mode 100644 node_modules/lodash._reevaluate/LICENSE.txt
create mode 100644 node_modules/lodash._reevaluate/README.md
create mode 100644 node_modules/lodash._reevaluate/index.js
create mode 100644 node_modules/lodash._reevaluate/package.json
create mode 100644 node_modules/lodash._reinterpolate/LICENSE.txt
create mode 100644 node_modules/lodash._reinterpolate/README.md
create mode 100644 node_modules/lodash._reinterpolate/index.js
create mode 100644 node_modules/lodash._reinterpolate/package.json
create mode 100644 node_modules/lodash._root/LICENSE
create mode 100644 node_modules/lodash._root/README.md
create mode 100644 node_modules/lodash._root/index.js
create mode 100644 node_modules/lodash._root/package.json
create mode 100644 node_modules/lodash.assignwith/LICENSE
create mode 100644 node_modules/lodash.assignwith/README.md
create mode 100644 node_modules/lodash.assignwith/index.js
create mode 100644 node_modules/lodash.assignwith/package.json
create mode 100644 node_modules/lodash.escape/LICENSE
create mode 100644 node_modules/lodash.escape/README.md
create mode 100644 node_modules/lodash.escape/index.js
create mode 100644 node_modules/lodash.escape/package.json
create mode 100644 node_modules/lodash.isarguments/LICENSE
create mode 100644 node_modules/lodash.isarguments/README.md
create mode 100644 node_modules/lodash.isarguments/index.js
create mode 100644 node_modules/lodash.isarguments/package.json
create mode 100644 node_modules/lodash.isarray/LICENSE
create mode 100644 node_modules/lodash.isarray/README.md
create mode 100644 node_modules/lodash.isarray/index.js
create mode 100644 node_modules/lodash.isarray/package.json
create mode 100644 node_modules/lodash.isempty/LICENSE
create mode 100644 node_modules/lodash.isempty/README.md
create mode 100644 node_modules/lodash.isempty/index.js
create mode 100644 node_modules/lodash.isempty/package.json
create mode 100644 node_modules/lodash.isplainobject/LICENSE
create mode 100644 node_modules/lodash.isplainobject/README.md
create mode 100644 node_modules/lodash.isplainobject/index.js
create mode 100644 node_modules/lodash.isplainobject/package.json
create mode 100644 node_modules/lodash.isstring/LICENSE
create mode 100644 node_modules/lodash.isstring/README.md
create mode 100644 node_modules/lodash.isstring/index.js
create mode 100644 node_modules/lodash.isstring/package.json
create mode 100644 node_modules/lodash.keys/LICENSE
create mode 100644 node_modules/lodash.keys/README.md
create mode 100644 node_modules/lodash.keys/index.js
create mode 100644 node_modules/lodash.keys/package.json
create mode 100644 node_modules/lodash.mapvalues/LICENSE
create mode 100644 node_modules/lodash.mapvalues/README.md
create mode 100644 node_modules/lodash.mapvalues/index.js
create mode 100644 node_modules/lodash.mapvalues/package.json
create mode 100644 node_modules/lodash.pick/LICENSE
create mode 100644 node_modules/lodash.pick/README.md
create mode 100644 node_modules/lodash.pick/index.js
create mode 100644 node_modules/lodash.pick/package.json
create mode 100644 node_modules/lodash.restparam/LICENSE.txt
create mode 100644 node_modules/lodash.restparam/README.md
create mode 100644 node_modules/lodash.restparam/index.js
create mode 100644 node_modules/lodash.restparam/package.json
create mode 100644 node_modules/lodash.template/LICENSE
create mode 100644 node_modules/lodash.template/README.md
create mode 100644 node_modules/lodash.template/index.js
create mode 100644 node_modules/lodash.template/package.json
create mode 100644 node_modules/lodash.templatesettings/LICENSE
create mode 100644 node_modules/lodash.templatesettings/README.md
create mode 100644 node_modules/lodash.templatesettings/index.js
create mode 100644 node_modules/lodash.templatesettings/package.json
create mode 100644 node_modules/lodash/LICENSE
create mode 100644 node_modules/lodash/README.md
create mode 100644 node_modules/lodash/_DataView.js
create mode 100644 node_modules/lodash/_Hash.js
create mode 100644 node_modules/lodash/_LazyWrapper.js
create mode 100644 node_modules/lodash/_ListCache.js
create mode 100644 node_modules/lodash/_LodashWrapper.js
create mode 100644 node_modules/lodash/_Map.js
create mode 100644 node_modules/lodash/_MapCache.js
create mode 100644 node_modules/lodash/_Promise.js
create mode 100644 node_modules/lodash/_Reflect.js
create mode 100644 node_modules/lodash/_Set.js
create mode 100644 node_modules/lodash/_SetCache.js
create mode 100644 node_modules/lodash/_Stack.js
create mode 100644 node_modules/lodash/_Symbol.js
create mode 100644 node_modules/lodash/_Uint8Array.js
create mode 100644 node_modules/lodash/_WeakMap.js
create mode 100644 node_modules/lodash/_addMapEntry.js
create mode 100644 node_modules/lodash/_addSetEntry.js
create mode 100644 node_modules/lodash/_apply.js
create mode 100644 node_modules/lodash/_arrayAggregator.js
create mode 100644 node_modules/lodash/_arrayEach.js
create mode 100644 node_modules/lodash/_arrayEachRight.js
create mode 100644 node_modules/lodash/_arrayEvery.js
create mode 100644 node_modules/lodash/_arrayFilter.js
create mode 100644 node_modules/lodash/_arrayIncludes.js
create mode 100644 node_modules/lodash/_arrayIncludesWith.js
create mode 100644 node_modules/lodash/_arrayMap.js
create mode 100644 node_modules/lodash/_arrayPush.js
create mode 100644 node_modules/lodash/_arrayReduce.js
create mode 100644 node_modules/lodash/_arrayReduceRight.js
create mode 100644 node_modules/lodash/_arraySome.js
create mode 100644 node_modules/lodash/_assignInDefaults.js
create mode 100644 node_modules/lodash/_assignMergeValue.js
create mode 100644 node_modules/lodash/_assignValue.js
create mode 100644 node_modules/lodash/_assocIndexOf.js
create mode 100644 node_modules/lodash/_baseAggregator.js
create mode 100644 node_modules/lodash/_baseAssign.js
create mode 100644 node_modules/lodash/_baseAt.js
create mode 100644 node_modules/lodash/_baseClamp.js
create mode 100644 node_modules/lodash/_baseClone.js
create mode 100644 node_modules/lodash/_baseConforms.js
create mode 100644 node_modules/lodash/_baseCreate.js
create mode 100644 node_modules/lodash/_baseDelay.js
create mode 100644 node_modules/lodash/_baseDifference.js
create mode 100644 node_modules/lodash/_baseEach.js
create mode 100644 node_modules/lodash/_baseEachRight.js
create mode 100644 node_modules/lodash/_baseEvery.js
create mode 100644 node_modules/lodash/_baseExtremum.js
create mode 100644 node_modules/lodash/_baseFill.js
create mode 100644 node_modules/lodash/_baseFilter.js
create mode 100644 node_modules/lodash/_baseFind.js
create mode 100644 node_modules/lodash/_baseFindIndex.js
create mode 100644 node_modules/lodash/_baseFlatten.js
create mode 100644 node_modules/lodash/_baseFor.js
create mode 100644 node_modules/lodash/_baseForOwn.js
create mode 100644 node_modules/lodash/_baseForOwnRight.js
create mode 100644 node_modules/lodash/_baseForRight.js
create mode 100644 node_modules/lodash/_baseFunctions.js
create mode 100644 node_modules/lodash/_baseGet.js
create mode 100644 node_modules/lodash/_baseGetAllKeys.js
create mode 100644 node_modules/lodash/_baseGt.js
create mode 100644 node_modules/lodash/_baseHas.js
create mode 100644 node_modules/lodash/_baseHasIn.js
create mode 100644 node_modules/lodash/_baseInRange.js
create mode 100644 node_modules/lodash/_baseIndexOf.js
create mode 100644 node_modules/lodash/_baseIndexOfWith.js
create mode 100644 node_modules/lodash/_baseIntersection.js
create mode 100644 node_modules/lodash/_baseInverter.js
create mode 100644 node_modules/lodash/_baseInvoke.js
create mode 100644 node_modules/lodash/_baseIsEqual.js
create mode 100644 node_modules/lodash/_baseIsEqualDeep.js
create mode 100644 node_modules/lodash/_baseIsMatch.js
create mode 100644 node_modules/lodash/_baseIteratee.js
create mode 100644 node_modules/lodash/_baseKeys.js
create mode 100644 node_modules/lodash/_baseKeysIn.js
create mode 100644 node_modules/lodash/_baseLodash.js
create mode 100644 node_modules/lodash/_baseLt.js
create mode 100644 node_modules/lodash/_baseMap.js
create mode 100644 node_modules/lodash/_baseMatches.js
create mode 100644 node_modules/lodash/_baseMatchesProperty.js
create mode 100644 node_modules/lodash/_baseMean.js
create mode 100644 node_modules/lodash/_baseMerge.js
create mode 100644 node_modules/lodash/_baseMergeDeep.js
create mode 100644 node_modules/lodash/_baseNth.js
create mode 100644 node_modules/lodash/_baseOrderBy.js
create mode 100644 node_modules/lodash/_basePick.js
create mode 100644 node_modules/lodash/_basePickBy.js
create mode 100644 node_modules/lodash/_baseProperty.js
create mode 100644 node_modules/lodash/_basePropertyDeep.js
create mode 100644 node_modules/lodash/_basePullAll.js
create mode 100644 node_modules/lodash/_basePullAt.js
create mode 100644 node_modules/lodash/_baseRandom.js
create mode 100644 node_modules/lodash/_baseRange.js
create mode 100644 node_modules/lodash/_baseReduce.js
create mode 100644 node_modules/lodash/_baseRepeat.js
create mode 100644 node_modules/lodash/_baseSet.js
create mode 100644 node_modules/lodash/_baseSetData.js
create mode 100644 node_modules/lodash/_baseSlice.js
create mode 100644 node_modules/lodash/_baseSome.js
create mode 100644 node_modules/lodash/_baseSortBy.js
create mode 100644 node_modules/lodash/_baseSortedIndex.js
create mode 100644 node_modules/lodash/_baseSortedIndexBy.js
create mode 100644 node_modules/lodash/_baseSortedUniq.js
create mode 100644 node_modules/lodash/_baseSum.js
create mode 100644 node_modules/lodash/_baseTimes.js
create mode 100644 node_modules/lodash/_baseToNumber.js
create mode 100644 node_modules/lodash/_baseToPairs.js
create mode 100644 node_modules/lodash/_baseToString.js
create mode 100644 node_modules/lodash/_baseUnary.js
create mode 100644 node_modules/lodash/_baseUniq.js
create mode 100644 node_modules/lodash/_baseUnset.js
create mode 100644 node_modules/lodash/_baseUpdate.js
create mode 100644 node_modules/lodash/_baseValues.js
create mode 100644 node_modules/lodash/_baseWhile.js
create mode 100644 node_modules/lodash/_baseWrapperValue.js
create mode 100644 node_modules/lodash/_baseXor.js
create mode 100644 node_modules/lodash/_baseZipObject.js
create mode 100644 node_modules/lodash/_cacheHas.js
create mode 100644 node_modules/lodash/_castArrayLikeObject.js
create mode 100644 node_modules/lodash/_castFunction.js
create mode 100644 node_modules/lodash/_castPath.js
create mode 100644 node_modules/lodash/_castSlice.js
create mode 100644 node_modules/lodash/_charsEndIndex.js
create mode 100644 node_modules/lodash/_charsStartIndex.js
create mode 100644 node_modules/lodash/_checkGlobal.js
create mode 100644 node_modules/lodash/_cloneArrayBuffer.js
create mode 100644 node_modules/lodash/_cloneBuffer.js
create mode 100644 node_modules/lodash/_cloneDataView.js
create mode 100644 node_modules/lodash/_cloneMap.js
create mode 100644 node_modules/lodash/_cloneRegExp.js
create mode 100644 node_modules/lodash/_cloneSet.js
create mode 100644 node_modules/lodash/_cloneSymbol.js
create mode 100644 node_modules/lodash/_cloneTypedArray.js
create mode 100644 node_modules/lodash/_compareAscending.js
create mode 100644 node_modules/lodash/_compareMultiple.js
create mode 100644 node_modules/lodash/_composeArgs.js
create mode 100644 node_modules/lodash/_composeArgsRight.js
create mode 100644 node_modules/lodash/_copyArray.js
create mode 100644 node_modules/lodash/_copyObject.js
create mode 100644 node_modules/lodash/_copySymbols.js
create mode 100644 node_modules/lodash/_countHolders.js
create mode 100644 node_modules/lodash/_createAggregator.js
create mode 100644 node_modules/lodash/_createAssigner.js
create mode 100644 node_modules/lodash/_createBaseEach.js
create mode 100644 node_modules/lodash/_createBaseFor.js
create mode 100644 node_modules/lodash/_createBaseWrapper.js
create mode 100644 node_modules/lodash/_createCaseFirst.js
create mode 100644 node_modules/lodash/_createCompounder.js
create mode 100644 node_modules/lodash/_createCtorWrapper.js
create mode 100644 node_modules/lodash/_createCurryWrapper.js
create mode 100644 node_modules/lodash/_createFlow.js
create mode 100644 node_modules/lodash/_createHybridWrapper.js
create mode 100644 node_modules/lodash/_createInverter.js
create mode 100644 node_modules/lodash/_createMathOperation.js
create mode 100644 node_modules/lodash/_createOver.js
create mode 100644 node_modules/lodash/_createPadding.js
create mode 100644 node_modules/lodash/_createPartialWrapper.js
create mode 100644 node_modules/lodash/_createRange.js
create mode 100644 node_modules/lodash/_createRecurryWrapper.js
create mode 100644 node_modules/lodash/_createRelationalOperation.js
create mode 100644 node_modules/lodash/_createRound.js
create mode 100644 node_modules/lodash/_createSet.js
create mode 100644 node_modules/lodash/_createToPairs.js
create mode 100644 node_modules/lodash/_createWrapper.js
create mode 100644 node_modules/lodash/_deburrLetter.js
create mode 100644 node_modules/lodash/_equalArrays.js
create mode 100644 node_modules/lodash/_equalByTag.js
create mode 100644 node_modules/lodash/_equalObjects.js
create mode 100644 node_modules/lodash/_escapeHtmlChar.js
create mode 100644 node_modules/lodash/_escapeStringChar.js
create mode 100644 node_modules/lodash/_getAllKeys.js
create mode 100644 node_modules/lodash/_getAllKeysIn.js
create mode 100644 node_modules/lodash/_getData.js
create mode 100644 node_modules/lodash/_getFuncName.js
create mode 100644 node_modules/lodash/_getHolder.js
create mode 100644 node_modules/lodash/_getLength.js
create mode 100644 node_modules/lodash/_getMapData.js
create mode 100644 node_modules/lodash/_getMatchData.js
create mode 100644 node_modules/lodash/_getNative.js
create mode 100644 node_modules/lodash/_getPrototype.js
create mode 100644 node_modules/lodash/_getSymbols.js
create mode 100644 node_modules/lodash/_getSymbolsIn.js
create mode 100644 node_modules/lodash/_getTag.js
create mode 100644 node_modules/lodash/_getView.js
create mode 100644 node_modules/lodash/_hasPath.js
create mode 100644 node_modules/lodash/_hashClear.js
create mode 100644 node_modules/lodash/_hashDelete.js
create mode 100644 node_modules/lodash/_hashGet.js
create mode 100644 node_modules/lodash/_hashHas.js
create mode 100644 node_modules/lodash/_hashSet.js
create mode 100644 node_modules/lodash/_indexKeys.js
create mode 100644 node_modules/lodash/_indexOfNaN.js
create mode 100644 node_modules/lodash/_initCloneArray.js
create mode 100644 node_modules/lodash/_initCloneByTag.js
create mode 100644 node_modules/lodash/_initCloneObject.js
create mode 100644 node_modules/lodash/_isFlattenable.js
create mode 100644 node_modules/lodash/_isFlattenableIteratee.js
create mode 100644 node_modules/lodash/_isHostObject.js
create mode 100644 node_modules/lodash/_isIndex.js
create mode 100644 node_modules/lodash/_isIterateeCall.js
create mode 100644 node_modules/lodash/_isKey.js
create mode 100644 node_modules/lodash/_isKeyable.js
create mode 100644 node_modules/lodash/_isLaziable.js
create mode 100644 node_modules/lodash/_isPrototype.js
create mode 100644 node_modules/lodash/_isStrictComparable.js
create mode 100644 node_modules/lodash/_iteratorToArray.js
create mode 100644 node_modules/lodash/_lazyClone.js
create mode 100644 node_modules/lodash/_lazyReverse.js
create mode 100644 node_modules/lodash/_lazyValue.js
create mode 100644 node_modules/lodash/_listCacheClear.js
create mode 100644 node_modules/lodash/_listCacheDelete.js
create mode 100644 node_modules/lodash/_listCacheGet.js
create mode 100644 node_modules/lodash/_listCacheHas.js
create mode 100644 node_modules/lodash/_listCacheSet.js
create mode 100644 node_modules/lodash/_mapCacheClear.js
create mode 100644 node_modules/lodash/_mapCacheDelete.js
create mode 100644 node_modules/lodash/_mapCacheGet.js
create mode 100644 node_modules/lodash/_mapCacheHas.js
create mode 100644 node_modules/lodash/_mapCacheSet.js
create mode 100644 node_modules/lodash/_mapToArray.js
create mode 100644 node_modules/lodash/_matchesStrictComparable.js
create mode 100644 node_modules/lodash/_mergeData.js
create mode 100644 node_modules/lodash/_mergeDefaults.js
create mode 100644 node_modules/lodash/_metaMap.js
create mode 100644 node_modules/lodash/_nativeCreate.js
create mode 100644 node_modules/lodash/_parent.js
create mode 100644 node_modules/lodash/_reEscape.js
create mode 100644 node_modules/lodash/_reEvaluate.js
create mode 100644 node_modules/lodash/_reHasComplexSymbol.js
create mode 100644 node_modules/lodash/_reInterpolate.js
create mode 100644 node_modules/lodash/_realNames.js
create mode 100644 node_modules/lodash/_reorder.js
create mode 100644 node_modules/lodash/_replaceHolders.js
create mode 100644 node_modules/lodash/_root.js
create mode 100644 node_modules/lodash/_setCacheAdd.js
create mode 100644 node_modules/lodash/_setCacheHas.js
create mode 100644 node_modules/lodash/_setData.js
create mode 100644 node_modules/lodash/_setToArray.js
create mode 100644 node_modules/lodash/_setToPairs.js
create mode 100644 node_modules/lodash/_stackClear.js
create mode 100644 node_modules/lodash/_stackDelete.js
create mode 100644 node_modules/lodash/_stackGet.js
create mode 100644 node_modules/lodash/_stackHas.js
create mode 100644 node_modules/lodash/_stackSet.js
create mode 100644 node_modules/lodash/_stringSize.js
create mode 100644 node_modules/lodash/_stringToArray.js
create mode 100644 node_modules/lodash/_stringToPath.js
create mode 100644 node_modules/lodash/_toKey.js
create mode 100644 node_modules/lodash/_toSource.js
create mode 100644 node_modules/lodash/_unescapeHtmlChar.js
create mode 100644 node_modules/lodash/_wrapperClone.js
create mode 100644 node_modules/lodash/add.js
create mode 100644 node_modules/lodash/after.js
create mode 100644 node_modules/lodash/array.js
create mode 100644 node_modules/lodash/ary.js
create mode 100644 node_modules/lodash/assign.js
create mode 100644 node_modules/lodash/assignIn.js
create mode 100644 node_modules/lodash/assignInWith.js
create mode 100644 node_modules/lodash/assignWith.js
create mode 100644 node_modules/lodash/at.js
create mode 100644 node_modules/lodash/attempt.js
create mode 100644 node_modules/lodash/before.js
create mode 100644 node_modules/lodash/bind.js
create mode 100644 node_modules/lodash/bindAll.js
create mode 100644 node_modules/lodash/bindKey.js
create mode 100644 node_modules/lodash/camelCase.js
create mode 100644 node_modules/lodash/capitalize.js
create mode 100644 node_modules/lodash/castArray.js
create mode 100644 node_modules/lodash/ceil.js
create mode 100644 node_modules/lodash/chain.js
create mode 100644 node_modules/lodash/chunk.js
create mode 100644 node_modules/lodash/clamp.js
create mode 100644 node_modules/lodash/clone.js
create mode 100644 node_modules/lodash/cloneDeep.js
create mode 100644 node_modules/lodash/cloneDeepWith.js
create mode 100644 node_modules/lodash/cloneWith.js
create mode 100644 node_modules/lodash/collection.js
create mode 100644 node_modules/lodash/commit.js
create mode 100644 node_modules/lodash/compact.js
create mode 100644 node_modules/lodash/concat.js
create mode 100644 node_modules/lodash/cond.js
create mode 100644 node_modules/lodash/conforms.js
create mode 100644 node_modules/lodash/constant.js
create mode 100644 node_modules/lodash/core.js
create mode 100644 node_modules/lodash/core.min.js
create mode 100644 node_modules/lodash/countBy.js
create mode 100644 node_modules/lodash/create.js
create mode 100644 node_modules/lodash/curry.js
create mode 100644 node_modules/lodash/curryRight.js
create mode 100644 node_modules/lodash/date.js
create mode 100644 node_modules/lodash/debounce.js
create mode 100644 node_modules/lodash/deburr.js
create mode 100644 node_modules/lodash/defaults.js
create mode 100644 node_modules/lodash/defaultsDeep.js
create mode 100644 node_modules/lodash/defer.js
create mode 100644 node_modules/lodash/delay.js
create mode 100644 node_modules/lodash/difference.js
create mode 100644 node_modules/lodash/differenceBy.js
create mode 100644 node_modules/lodash/differenceWith.js
create mode 100644 node_modules/lodash/divide.js
create mode 100644 node_modules/lodash/drop.js
create mode 100644 node_modules/lodash/dropRight.js
create mode 100644 node_modules/lodash/dropRightWhile.js
create mode 100644 node_modules/lodash/dropWhile.js
create mode 100644 node_modules/lodash/each.js
create mode 100644 node_modules/lodash/eachRight.js
create mode 100644 node_modules/lodash/endsWith.js
create mode 100644 node_modules/lodash/entries.js
create mode 100644 node_modules/lodash/entriesIn.js
create mode 100644 node_modules/lodash/eq.js
create mode 100644 node_modules/lodash/escape.js
create mode 100644 node_modules/lodash/escapeRegExp.js
create mode 100644 node_modules/lodash/every.js
create mode 100644 node_modules/lodash/extend.js
create mode 100644 node_modules/lodash/extendWith.js
create mode 100644 node_modules/lodash/fill.js
create mode 100644 node_modules/lodash/filter.js
create mode 100644 node_modules/lodash/find.js
create mode 100644 node_modules/lodash/findIndex.js
create mode 100644 node_modules/lodash/findKey.js
create mode 100644 node_modules/lodash/findLast.js
create mode 100644 node_modules/lodash/findLastIndex.js
create mode 100644 node_modules/lodash/findLastKey.js
create mode 100644 node_modules/lodash/first.js
create mode 100644 node_modules/lodash/flatMap.js
create mode 100644 node_modules/lodash/flatMapDeep.js
create mode 100644 node_modules/lodash/flatMapDepth.js
create mode 100644 node_modules/lodash/flatten.js
create mode 100644 node_modules/lodash/flattenDeep.js
create mode 100644 node_modules/lodash/flattenDepth.js
create mode 100644 node_modules/lodash/flip.js
create mode 100644 node_modules/lodash/floor.js
create mode 100644 node_modules/lodash/flow.js
create mode 100644 node_modules/lodash/flowRight.js
create mode 100644 node_modules/lodash/forEach.js
create mode 100644 node_modules/lodash/forEachRight.js
create mode 100644 node_modules/lodash/forIn.js
create mode 100644 node_modules/lodash/forInRight.js
create mode 100644 node_modules/lodash/forOwn.js
create mode 100644 node_modules/lodash/forOwnRight.js
create mode 100644 node_modules/lodash/fp.js
create mode 100644 node_modules/lodash/fp/__.js
create mode 100644 node_modules/lodash/fp/_baseConvert.js
create mode 100644 node_modules/lodash/fp/_convertBrowser.js
create mode 100644 node_modules/lodash/fp/_falseOptions.js
create mode 100644 node_modules/lodash/fp/_mapping.js
create mode 100644 node_modules/lodash/fp/_util.js
create mode 100644 node_modules/lodash/fp/add.js
create mode 100644 node_modules/lodash/fp/after.js
create mode 100644 node_modules/lodash/fp/all.js
create mode 100644 node_modules/lodash/fp/allPass.js
create mode 100644 node_modules/lodash/fp/always.js
create mode 100644 node_modules/lodash/fp/any.js
create mode 100644 node_modules/lodash/fp/anyPass.js
create mode 100644 node_modules/lodash/fp/apply.js
create mode 100644 node_modules/lodash/fp/array.js
create mode 100644 node_modules/lodash/fp/ary.js
create mode 100644 node_modules/lodash/fp/assign.js
create mode 100644 node_modules/lodash/fp/assignIn.js
create mode 100644 node_modules/lodash/fp/assignInWith.js
create mode 100644 node_modules/lodash/fp/assignWith.js
create mode 100644 node_modules/lodash/fp/assoc.js
create mode 100644 node_modules/lodash/fp/assocPath.js
create mode 100644 node_modules/lodash/fp/at.js
create mode 100644 node_modules/lodash/fp/attempt.js
create mode 100644 node_modules/lodash/fp/before.js
create mode 100644 node_modules/lodash/fp/bind.js
create mode 100644 node_modules/lodash/fp/bindAll.js
create mode 100644 node_modules/lodash/fp/bindKey.js
create mode 100644 node_modules/lodash/fp/camelCase.js
create mode 100644 node_modules/lodash/fp/capitalize.js
create mode 100644 node_modules/lodash/fp/castArray.js
create mode 100644 node_modules/lodash/fp/ceil.js
create mode 100644 node_modules/lodash/fp/chain.js
create mode 100644 node_modules/lodash/fp/chunk.js
create mode 100644 node_modules/lodash/fp/clamp.js
create mode 100644 node_modules/lodash/fp/clone.js
create mode 100644 node_modules/lodash/fp/cloneDeep.js
create mode 100644 node_modules/lodash/fp/cloneDeepWith.js
create mode 100644 node_modules/lodash/fp/cloneWith.js
create mode 100644 node_modules/lodash/fp/collection.js
create mode 100644 node_modules/lodash/fp/commit.js
create mode 100644 node_modules/lodash/fp/compact.js
create mode 100644 node_modules/lodash/fp/complement.js
create mode 100644 node_modules/lodash/fp/compose.js
create mode 100644 node_modules/lodash/fp/concat.js
create mode 100644 node_modules/lodash/fp/cond.js
create mode 100644 node_modules/lodash/fp/conforms.js
create mode 100644 node_modules/lodash/fp/constant.js
create mode 100644 node_modules/lodash/fp/contains.js
create mode 100644 node_modules/lodash/fp/convert.js
create mode 100644 node_modules/lodash/fp/countBy.js
create mode 100644 node_modules/lodash/fp/create.js
create mode 100644 node_modules/lodash/fp/curry.js
create mode 100644 node_modules/lodash/fp/curryN.js
create mode 100644 node_modules/lodash/fp/curryRight.js
create mode 100644 node_modules/lodash/fp/curryRightN.js
create mode 100644 node_modules/lodash/fp/date.js
create mode 100644 node_modules/lodash/fp/debounce.js
create mode 100644 node_modules/lodash/fp/deburr.js
create mode 100644 node_modules/lodash/fp/defaults.js
create mode 100644 node_modules/lodash/fp/defaultsDeep.js
create mode 100644 node_modules/lodash/fp/defer.js
create mode 100644 node_modules/lodash/fp/delay.js
create mode 100644 node_modules/lodash/fp/difference.js
create mode 100644 node_modules/lodash/fp/differenceBy.js
create mode 100644 node_modules/lodash/fp/differenceWith.js
create mode 100644 node_modules/lodash/fp/dissoc.js
create mode 100644 node_modules/lodash/fp/dissocPath.js
create mode 100644 node_modules/lodash/fp/divide.js
create mode 100644 node_modules/lodash/fp/drop.js
create mode 100644 node_modules/lodash/fp/dropRight.js
create mode 100644 node_modules/lodash/fp/dropRightWhile.js
create mode 100644 node_modules/lodash/fp/dropWhile.js
create mode 100644 node_modules/lodash/fp/each.js
create mode 100644 node_modules/lodash/fp/eachRight.js
create mode 100644 node_modules/lodash/fp/endsWith.js
create mode 100644 node_modules/lodash/fp/entries.js
create mode 100644 node_modules/lodash/fp/entriesIn.js
create mode 100644 node_modules/lodash/fp/eq.js
create mode 100644 node_modules/lodash/fp/equals.js
create mode 100644 node_modules/lodash/fp/escape.js
create mode 100644 node_modules/lodash/fp/escapeRegExp.js
create mode 100644 node_modules/lodash/fp/every.js
create mode 100644 node_modules/lodash/fp/extend.js
create mode 100644 node_modules/lodash/fp/extendWith.js
create mode 100644 node_modules/lodash/fp/fill.js
create mode 100644 node_modules/lodash/fp/filter.js
create mode 100644 node_modules/lodash/fp/find.js
create mode 100644 node_modules/lodash/fp/findIndex.js
create mode 100644 node_modules/lodash/fp/findKey.js
create mode 100644 node_modules/lodash/fp/findLast.js
create mode 100644 node_modules/lodash/fp/findLastIndex.js
create mode 100644 node_modules/lodash/fp/findLastKey.js
create mode 100644 node_modules/lodash/fp/first.js
create mode 100644 node_modules/lodash/fp/flatMap.js
create mode 100644 node_modules/lodash/fp/flatMapDeep.js
create mode 100644 node_modules/lodash/fp/flatMapDepth.js
create mode 100644 node_modules/lodash/fp/flatten.js
create mode 100644 node_modules/lodash/fp/flattenDeep.js
create mode 100644 node_modules/lodash/fp/flattenDepth.js
create mode 100644 node_modules/lodash/fp/flip.js
create mode 100644 node_modules/lodash/fp/floor.js
create mode 100644 node_modules/lodash/fp/flow.js
create mode 100644 node_modules/lodash/fp/flowRight.js
create mode 100644 node_modules/lodash/fp/forEach.js
create mode 100644 node_modules/lodash/fp/forEachRight.js
create mode 100644 node_modules/lodash/fp/forIn.js
create mode 100644 node_modules/lodash/fp/forInRight.js
create mode 100644 node_modules/lodash/fp/forOwn.js
create mode 100644 node_modules/lodash/fp/forOwnRight.js
create mode 100644 node_modules/lodash/fp/fromPairs.js
create mode 100644 node_modules/lodash/fp/function.js
create mode 100644 node_modules/lodash/fp/functions.js
create mode 100644 node_modules/lodash/fp/functionsIn.js
create mode 100644 node_modules/lodash/fp/get.js
create mode 100644 node_modules/lodash/fp/getOr.js
create mode 100644 node_modules/lodash/fp/groupBy.js
create mode 100644 node_modules/lodash/fp/gt.js
create mode 100644 node_modules/lodash/fp/gte.js
create mode 100644 node_modules/lodash/fp/has.js
create mode 100644 node_modules/lodash/fp/hasIn.js
create mode 100644 node_modules/lodash/fp/head.js
create mode 100644 node_modules/lodash/fp/identical.js
create mode 100644 node_modules/lodash/fp/identity.js
create mode 100644 node_modules/lodash/fp/inRange.js
create mode 100644 node_modules/lodash/fp/includes.js
create mode 100644 node_modules/lodash/fp/indexOf.js
create mode 100644 node_modules/lodash/fp/init.js
create mode 100644 node_modules/lodash/fp/initial.js
create mode 100644 node_modules/lodash/fp/intersection.js
create mode 100644 node_modules/lodash/fp/intersectionBy.js
create mode 100644 node_modules/lodash/fp/intersectionWith.js
create mode 100644 node_modules/lodash/fp/invert.js
create mode 100644 node_modules/lodash/fp/invertBy.js
create mode 100644 node_modules/lodash/fp/invertObj.js
create mode 100644 node_modules/lodash/fp/invoke.js
create mode 100644 node_modules/lodash/fp/invokeArgs.js
create mode 100644 node_modules/lodash/fp/invokeArgsMap.js
create mode 100644 node_modules/lodash/fp/invokeMap.js
create mode 100644 node_modules/lodash/fp/isArguments.js
create mode 100644 node_modules/lodash/fp/isArray.js
create mode 100644 node_modules/lodash/fp/isArrayBuffer.js
create mode 100644 node_modules/lodash/fp/isArrayLike.js
create mode 100644 node_modules/lodash/fp/isArrayLikeObject.js
create mode 100644 node_modules/lodash/fp/isBoolean.js
create mode 100644 node_modules/lodash/fp/isBuffer.js
create mode 100644 node_modules/lodash/fp/isDate.js
create mode 100644 node_modules/lodash/fp/isElement.js
create mode 100644 node_modules/lodash/fp/isEmpty.js
create mode 100644 node_modules/lodash/fp/isEqual.js
create mode 100644 node_modules/lodash/fp/isEqualWith.js
create mode 100644 node_modules/lodash/fp/isError.js
create mode 100644 node_modules/lodash/fp/isFinite.js
create mode 100644 node_modules/lodash/fp/isFunction.js
create mode 100644 node_modules/lodash/fp/isInteger.js
create mode 100644 node_modules/lodash/fp/isLength.js
create mode 100644 node_modules/lodash/fp/isMap.js
create mode 100644 node_modules/lodash/fp/isMatch.js
create mode 100644 node_modules/lodash/fp/isMatchWith.js
create mode 100644 node_modules/lodash/fp/isNaN.js
create mode 100644 node_modules/lodash/fp/isNative.js
create mode 100644 node_modules/lodash/fp/isNil.js
create mode 100644 node_modules/lodash/fp/isNull.js
create mode 100644 node_modules/lodash/fp/isNumber.js
create mode 100644 node_modules/lodash/fp/isObject.js
create mode 100644 node_modules/lodash/fp/isObjectLike.js
create mode 100644 node_modules/lodash/fp/isPlainObject.js
create mode 100644 node_modules/lodash/fp/isRegExp.js
create mode 100644 node_modules/lodash/fp/isSafeInteger.js
create mode 100644 node_modules/lodash/fp/isSet.js
create mode 100644 node_modules/lodash/fp/isString.js
create mode 100644 node_modules/lodash/fp/isSymbol.js
create mode 100644 node_modules/lodash/fp/isTypedArray.js
create mode 100644 node_modules/lodash/fp/isUndefined.js
create mode 100644 node_modules/lodash/fp/isWeakMap.js
create mode 100644 node_modules/lodash/fp/isWeakSet.js
create mode 100644 node_modules/lodash/fp/iteratee.js
create mode 100644 node_modules/lodash/fp/join.js
create mode 100644 node_modules/lodash/fp/juxt.js
create mode 100644 node_modules/lodash/fp/kebabCase.js
create mode 100644 node_modules/lodash/fp/keyBy.js
create mode 100644 node_modules/lodash/fp/keys.js
create mode 100644 node_modules/lodash/fp/keysIn.js
create mode 100644 node_modules/lodash/fp/lang.js
create mode 100644 node_modules/lodash/fp/last.js
create mode 100644 node_modules/lodash/fp/lastIndexOf.js
create mode 100644 node_modules/lodash/fp/lowerCase.js
create mode 100644 node_modules/lodash/fp/lowerFirst.js
create mode 100644 node_modules/lodash/fp/lt.js
create mode 100644 node_modules/lodash/fp/lte.js
create mode 100644 node_modules/lodash/fp/map.js
create mode 100644 node_modules/lodash/fp/mapKeys.js
create mode 100644 node_modules/lodash/fp/mapValues.js
create mode 100644 node_modules/lodash/fp/matches.js
create mode 100644 node_modules/lodash/fp/matchesProperty.js
create mode 100644 node_modules/lodash/fp/math.js
create mode 100644 node_modules/lodash/fp/max.js
create mode 100644 node_modules/lodash/fp/maxBy.js
create mode 100644 node_modules/lodash/fp/mean.js
create mode 100644 node_modules/lodash/fp/meanBy.js
create mode 100644 node_modules/lodash/fp/memoize.js
create mode 100644 node_modules/lodash/fp/merge.js
create mode 100644 node_modules/lodash/fp/mergeWith.js
create mode 100644 node_modules/lodash/fp/method.js
create mode 100644 node_modules/lodash/fp/methodOf.js
create mode 100644 node_modules/lodash/fp/min.js
create mode 100644 node_modules/lodash/fp/minBy.js
create mode 100644 node_modules/lodash/fp/mixin.js
create mode 100644 node_modules/lodash/fp/multiply.js
create mode 100644 node_modules/lodash/fp/nAry.js
create mode 100644 node_modules/lodash/fp/negate.js
create mode 100644 node_modules/lodash/fp/next.js
create mode 100644 node_modules/lodash/fp/noop.js
create mode 100644 node_modules/lodash/fp/now.js
create mode 100644 node_modules/lodash/fp/nth.js
create mode 100644 node_modules/lodash/fp/nthArg.js
create mode 100644 node_modules/lodash/fp/number.js
create mode 100644 node_modules/lodash/fp/object.js
create mode 100644 node_modules/lodash/fp/omit.js
create mode 100644 node_modules/lodash/fp/omitAll.js
create mode 100644 node_modules/lodash/fp/omitBy.js
create mode 100644 node_modules/lodash/fp/once.js
create mode 100644 node_modules/lodash/fp/orderBy.js
create mode 100644 node_modules/lodash/fp/over.js
create mode 100644 node_modules/lodash/fp/overArgs.js
create mode 100644 node_modules/lodash/fp/overEvery.js
create mode 100644 node_modules/lodash/fp/overSome.js
create mode 100644 node_modules/lodash/fp/pad.js
create mode 100644 node_modules/lodash/fp/padChars.js
create mode 100644 node_modules/lodash/fp/padCharsEnd.js
create mode 100644 node_modules/lodash/fp/padCharsStart.js
create mode 100644 node_modules/lodash/fp/padEnd.js
create mode 100644 node_modules/lodash/fp/padStart.js
create mode 100644 node_modules/lodash/fp/parseInt.js
create mode 100644 node_modules/lodash/fp/partial.js
create mode 100644 node_modules/lodash/fp/partialRight.js
create mode 100644 node_modules/lodash/fp/partition.js
create mode 100644 node_modules/lodash/fp/path.js
create mode 100644 node_modules/lodash/fp/pathEq.js
create mode 100644 node_modules/lodash/fp/pathOr.js
create mode 100644 node_modules/lodash/fp/paths.js
create mode 100644 node_modules/lodash/fp/pick.js
create mode 100644 node_modules/lodash/fp/pickAll.js
create mode 100644 node_modules/lodash/fp/pickBy.js
create mode 100644 node_modules/lodash/fp/pipe.js
create mode 100644 node_modules/lodash/fp/placeholder.js
create mode 100644 node_modules/lodash/fp/plant.js
create mode 100644 node_modules/lodash/fp/pluck.js
create mode 100644 node_modules/lodash/fp/prop.js
create mode 100644 node_modules/lodash/fp/propEq.js
create mode 100644 node_modules/lodash/fp/propOr.js
create mode 100644 node_modules/lodash/fp/property.js
create mode 100644 node_modules/lodash/fp/propertyOf.js
create mode 100644 node_modules/lodash/fp/props.js
create mode 100644 node_modules/lodash/fp/pull.js
create mode 100644 node_modules/lodash/fp/pullAll.js
create mode 100644 node_modules/lodash/fp/pullAllBy.js
create mode 100644 node_modules/lodash/fp/pullAllWith.js
create mode 100644 node_modules/lodash/fp/pullAt.js
create mode 100644 node_modules/lodash/fp/random.js
create mode 100644 node_modules/lodash/fp/range.js
create mode 100644 node_modules/lodash/fp/rangeRight.js
create mode 100644 node_modules/lodash/fp/rearg.js
create mode 100644 node_modules/lodash/fp/reduce.js
create mode 100644 node_modules/lodash/fp/reduceRight.js
create mode 100644 node_modules/lodash/fp/reject.js
create mode 100644 node_modules/lodash/fp/remove.js
create mode 100644 node_modules/lodash/fp/repeat.js
create mode 100644 node_modules/lodash/fp/replace.js
create mode 100644 node_modules/lodash/fp/rest.js
create mode 100644 node_modules/lodash/fp/restFrom.js
create mode 100644 node_modules/lodash/fp/result.js
create mode 100644 node_modules/lodash/fp/reverse.js
create mode 100644 node_modules/lodash/fp/round.js
create mode 100644 node_modules/lodash/fp/sample.js
create mode 100644 node_modules/lodash/fp/sampleSize.js
create mode 100644 node_modules/lodash/fp/seq.js
create mode 100644 node_modules/lodash/fp/set.js
create mode 100644 node_modules/lodash/fp/setWith.js
create mode 100644 node_modules/lodash/fp/shuffle.js
create mode 100644 node_modules/lodash/fp/size.js
create mode 100644 node_modules/lodash/fp/slice.js
create mode 100644 node_modules/lodash/fp/snakeCase.js
create mode 100644 node_modules/lodash/fp/some.js
create mode 100644 node_modules/lodash/fp/sortBy.js
create mode 100644 node_modules/lodash/fp/sortedIndex.js
create mode 100644 node_modules/lodash/fp/sortedIndexBy.js
create mode 100644 node_modules/lodash/fp/sortedIndexOf.js
create mode 100644 node_modules/lodash/fp/sortedLastIndex.js
create mode 100644 node_modules/lodash/fp/sortedLastIndexBy.js
create mode 100644 node_modules/lodash/fp/sortedLastIndexOf.js
create mode 100644 node_modules/lodash/fp/sortedUniq.js
create mode 100644 node_modules/lodash/fp/sortedUniqBy.js
create mode 100644 node_modules/lodash/fp/split.js
create mode 100644 node_modules/lodash/fp/spread.js
create mode 100644 node_modules/lodash/fp/spreadFrom.js
create mode 100644 node_modules/lodash/fp/startCase.js
create mode 100644 node_modules/lodash/fp/startsWith.js
create mode 100644 node_modules/lodash/fp/string.js
create mode 100644 node_modules/lodash/fp/subtract.js
create mode 100644 node_modules/lodash/fp/sum.js
create mode 100644 node_modules/lodash/fp/sumBy.js
create mode 100644 node_modules/lodash/fp/tail.js
create mode 100644 node_modules/lodash/fp/take.js
create mode 100644 node_modules/lodash/fp/takeRight.js
create mode 100644 node_modules/lodash/fp/takeRightWhile.js
create mode 100644 node_modules/lodash/fp/takeWhile.js
create mode 100644 node_modules/lodash/fp/tap.js
create mode 100644 node_modules/lodash/fp/template.js
create mode 100644 node_modules/lodash/fp/templateSettings.js
create mode 100644 node_modules/lodash/fp/throttle.js
create mode 100644 node_modules/lodash/fp/thru.js
create mode 100644 node_modules/lodash/fp/times.js
create mode 100644 node_modules/lodash/fp/toArray.js
create mode 100644 node_modules/lodash/fp/toFinite.js
create mode 100644 node_modules/lodash/fp/toInteger.js
create mode 100644 node_modules/lodash/fp/toIterator.js
create mode 100644 node_modules/lodash/fp/toJSON.js
create mode 100644 node_modules/lodash/fp/toLength.js
create mode 100644 node_modules/lodash/fp/toLower.js
create mode 100644 node_modules/lodash/fp/toNumber.js
create mode 100644 node_modules/lodash/fp/toPairs.js
create mode 100644 node_modules/lodash/fp/toPairsIn.js
create mode 100644 node_modules/lodash/fp/toPath.js
create mode 100644 node_modules/lodash/fp/toPlainObject.js
create mode 100644 node_modules/lodash/fp/toSafeInteger.js
create mode 100644 node_modules/lodash/fp/toString.js
create mode 100644 node_modules/lodash/fp/toUpper.js
create mode 100644 node_modules/lodash/fp/transform.js
create mode 100644 node_modules/lodash/fp/trim.js
create mode 100644 node_modules/lodash/fp/trimChars.js
create mode 100644 node_modules/lodash/fp/trimCharsEnd.js
create mode 100644 node_modules/lodash/fp/trimCharsStart.js
create mode 100644 node_modules/lodash/fp/trimEnd.js
create mode 100644 node_modules/lodash/fp/trimStart.js
create mode 100644 node_modules/lodash/fp/truncate.js
create mode 100644 node_modules/lodash/fp/unapply.js
create mode 100644 node_modules/lodash/fp/unary.js
create mode 100644 node_modules/lodash/fp/unescape.js
create mode 100644 node_modules/lodash/fp/union.js
create mode 100644 node_modules/lodash/fp/unionBy.js
create mode 100644 node_modules/lodash/fp/unionWith.js
create mode 100644 node_modules/lodash/fp/uniq.js
create mode 100644 node_modules/lodash/fp/uniqBy.js
create mode 100644 node_modules/lodash/fp/uniqWith.js
create mode 100644 node_modules/lodash/fp/uniqueId.js
create mode 100644 node_modules/lodash/fp/unnest.js
create mode 100644 node_modules/lodash/fp/unset.js
create mode 100644 node_modules/lodash/fp/unzip.js
create mode 100644 node_modules/lodash/fp/unzipWith.js
create mode 100644 node_modules/lodash/fp/update.js
create mode 100644 node_modules/lodash/fp/updateWith.js
create mode 100644 node_modules/lodash/fp/upperCase.js
create mode 100644 node_modules/lodash/fp/upperFirst.js
create mode 100644 node_modules/lodash/fp/useWith.js
create mode 100644 node_modules/lodash/fp/util.js
create mode 100644 node_modules/lodash/fp/value.js
create mode 100644 node_modules/lodash/fp/valueOf.js
create mode 100644 node_modules/lodash/fp/values.js
create mode 100644 node_modules/lodash/fp/valuesIn.js
create mode 100644 node_modules/lodash/fp/whereEq.js
create mode 100644 node_modules/lodash/fp/without.js
create mode 100644 node_modules/lodash/fp/words.js
create mode 100644 node_modules/lodash/fp/wrap.js
create mode 100644 node_modules/lodash/fp/wrapperAt.js
create mode 100644 node_modules/lodash/fp/wrapperChain.js
create mode 100644 node_modules/lodash/fp/wrapperLodash.js
create mode 100644 node_modules/lodash/fp/wrapperReverse.js
create mode 100644 node_modules/lodash/fp/wrapperValue.js
create mode 100644 node_modules/lodash/fp/xor.js
create mode 100644 node_modules/lodash/fp/xorBy.js
create mode 100644 node_modules/lodash/fp/xorWith.js
create mode 100644 node_modules/lodash/fp/zip.js
create mode 100644 node_modules/lodash/fp/zipObj.js
create mode 100644 node_modules/lodash/fp/zipObject.js
create mode 100644 node_modules/lodash/fp/zipObjectDeep.js
create mode 100644 node_modules/lodash/fp/zipWith.js
create mode 100644 node_modules/lodash/fromPairs.js
create mode 100644 node_modules/lodash/function.js
create mode 100644 node_modules/lodash/functions.js
create mode 100644 node_modules/lodash/functionsIn.js
create mode 100644 node_modules/lodash/get.js
create mode 100644 node_modules/lodash/groupBy.js
create mode 100644 node_modules/lodash/gt.js
create mode 100644 node_modules/lodash/gte.js
create mode 100644 node_modules/lodash/has.js
create mode 100644 node_modules/lodash/hasIn.js
create mode 100644 node_modules/lodash/head.js
create mode 100644 node_modules/lodash/identity.js
create mode 100644 node_modules/lodash/inRange.js
create mode 100644 node_modules/lodash/includes.js
create mode 100644 node_modules/lodash/index.js
create mode 100644 node_modules/lodash/indexOf.js
create mode 100644 node_modules/lodash/initial.js
create mode 100644 node_modules/lodash/intersection.js
create mode 100644 node_modules/lodash/intersectionBy.js
create mode 100644 node_modules/lodash/intersectionWith.js
create mode 100644 node_modules/lodash/invert.js
create mode 100644 node_modules/lodash/invertBy.js
create mode 100644 node_modules/lodash/invoke.js
create mode 100644 node_modules/lodash/invokeMap.js
create mode 100644 node_modules/lodash/isArguments.js
create mode 100644 node_modules/lodash/isArray.js
create mode 100644 node_modules/lodash/isArrayBuffer.js
create mode 100644 node_modules/lodash/isArrayLike.js
create mode 100644 node_modules/lodash/isArrayLikeObject.js
create mode 100644 node_modules/lodash/isBoolean.js
create mode 100644 node_modules/lodash/isBuffer.js
create mode 100644 node_modules/lodash/isDate.js
create mode 100644 node_modules/lodash/isElement.js
create mode 100644 node_modules/lodash/isEmpty.js
create mode 100644 node_modules/lodash/isEqual.js
create mode 100644 node_modules/lodash/isEqualWith.js
create mode 100644 node_modules/lodash/isError.js
create mode 100644 node_modules/lodash/isFinite.js
create mode 100644 node_modules/lodash/isFunction.js
create mode 100644 node_modules/lodash/isInteger.js
create mode 100644 node_modules/lodash/isLength.js
create mode 100644 node_modules/lodash/isMap.js
create mode 100644 node_modules/lodash/isMatch.js
create mode 100644 node_modules/lodash/isMatchWith.js
create mode 100644 node_modules/lodash/isNaN.js
create mode 100644 node_modules/lodash/isNative.js
create mode 100644 node_modules/lodash/isNil.js
create mode 100644 node_modules/lodash/isNull.js
create mode 100644 node_modules/lodash/isNumber.js
create mode 100644 node_modules/lodash/isObject.js
create mode 100644 node_modules/lodash/isObjectLike.js
create mode 100644 node_modules/lodash/isPlainObject.js
create mode 100644 node_modules/lodash/isRegExp.js
create mode 100644 node_modules/lodash/isSafeInteger.js
create mode 100644 node_modules/lodash/isSet.js
create mode 100644 node_modules/lodash/isString.js
create mode 100644 node_modules/lodash/isSymbol.js
create mode 100644 node_modules/lodash/isTypedArray.js
create mode 100644 node_modules/lodash/isUndefined.js
create mode 100644 node_modules/lodash/isWeakMap.js
create mode 100644 node_modules/lodash/isWeakSet.js
create mode 100644 node_modules/lodash/iteratee.js
create mode 100644 node_modules/lodash/join.js
create mode 100644 node_modules/lodash/kebabCase.js
create mode 100644 node_modules/lodash/keyBy.js
create mode 100644 node_modules/lodash/keys.js
create mode 100644 node_modules/lodash/keysIn.js
create mode 100644 node_modules/lodash/lang.js
create mode 100644 node_modules/lodash/last.js
create mode 100644 node_modules/lodash/lastIndexOf.js
create mode 100644 node_modules/lodash/lodash.js
create mode 100644 node_modules/lodash/lodash.min.js
create mode 100644 node_modules/lodash/lowerCase.js
create mode 100644 node_modules/lodash/lowerFirst.js
create mode 100644 node_modules/lodash/lt.js
create mode 100644 node_modules/lodash/lte.js
create mode 100644 node_modules/lodash/map.js
create mode 100644 node_modules/lodash/mapKeys.js
create mode 100644 node_modules/lodash/mapValues.js
create mode 100644 node_modules/lodash/matches.js
create mode 100644 node_modules/lodash/matchesProperty.js
create mode 100644 node_modules/lodash/math.js
create mode 100644 node_modules/lodash/max.js
create mode 100644 node_modules/lodash/maxBy.js
create mode 100644 node_modules/lodash/mean.js
create mode 100644 node_modules/lodash/meanBy.js
create mode 100644 node_modules/lodash/memoize.js
create mode 100644 node_modules/lodash/merge.js
create mode 100644 node_modules/lodash/mergeWith.js
create mode 100644 node_modules/lodash/method.js
create mode 100644 node_modules/lodash/methodOf.js
create mode 100644 node_modules/lodash/min.js
create mode 100644 node_modules/lodash/minBy.js
create mode 100644 node_modules/lodash/mixin.js
create mode 100644 node_modules/lodash/multiply.js
create mode 100644 node_modules/lodash/negate.js
create mode 100644 node_modules/lodash/next.js
create mode 100644 node_modules/lodash/noop.js
create mode 100644 node_modules/lodash/now.js
create mode 100644 node_modules/lodash/nth.js
create mode 100644 node_modules/lodash/nthArg.js
create mode 100644 node_modules/lodash/number.js
create mode 100644 node_modules/lodash/object.js
create mode 100644 node_modules/lodash/omit.js
create mode 100644 node_modules/lodash/omitBy.js
create mode 100644 node_modules/lodash/once.js
create mode 100644 node_modules/lodash/orderBy.js
create mode 100644 node_modules/lodash/over.js
create mode 100644 node_modules/lodash/overArgs.js
create mode 100644 node_modules/lodash/overEvery.js
create mode 100644 node_modules/lodash/overSome.js
create mode 100644 node_modules/lodash/package.json
create mode 100644 node_modules/lodash/pad.js
create mode 100644 node_modules/lodash/padEnd.js
create mode 100644 node_modules/lodash/padStart.js
create mode 100644 node_modules/lodash/parseInt.js
create mode 100644 node_modules/lodash/partial.js
create mode 100644 node_modules/lodash/partialRight.js
create mode 100644 node_modules/lodash/partition.js
create mode 100644 node_modules/lodash/pick.js
create mode 100644 node_modules/lodash/pickBy.js
create mode 100644 node_modules/lodash/plant.js
create mode 100644 node_modules/lodash/property.js
create mode 100644 node_modules/lodash/propertyOf.js
create mode 100644 node_modules/lodash/pull.js
create mode 100644 node_modules/lodash/pullAll.js
create mode 100644 node_modules/lodash/pullAllBy.js
create mode 100644 node_modules/lodash/pullAllWith.js
create mode 100644 node_modules/lodash/pullAt.js
create mode 100644 node_modules/lodash/random.js
create mode 100644 node_modules/lodash/range.js
create mode 100644 node_modules/lodash/rangeRight.js
create mode 100644 node_modules/lodash/rearg.js
create mode 100644 node_modules/lodash/reduce.js
create mode 100644 node_modules/lodash/reduceRight.js
create mode 100644 node_modules/lodash/reject.js
create mode 100644 node_modules/lodash/remove.js
create mode 100644 node_modules/lodash/repeat.js
create mode 100644 node_modules/lodash/replace.js
create mode 100644 node_modules/lodash/rest.js
create mode 100644 node_modules/lodash/result.js
create mode 100644 node_modules/lodash/reverse.js
create mode 100644 node_modules/lodash/round.js
create mode 100644 node_modules/lodash/sample.js
create mode 100644 node_modules/lodash/sampleSize.js
create mode 100644 node_modules/lodash/seq.js
create mode 100644 node_modules/lodash/set.js
create mode 100644 node_modules/lodash/setWith.js
create mode 100644 node_modules/lodash/shuffle.js
create mode 100644 node_modules/lodash/size.js
create mode 100644 node_modules/lodash/slice.js
create mode 100644 node_modules/lodash/snakeCase.js
create mode 100644 node_modules/lodash/some.js
create mode 100644 node_modules/lodash/sortBy.js
create mode 100644 node_modules/lodash/sortedIndex.js
create mode 100644 node_modules/lodash/sortedIndexBy.js
create mode 100644 node_modules/lodash/sortedIndexOf.js
create mode 100644 node_modules/lodash/sortedLastIndex.js
create mode 100644 node_modules/lodash/sortedLastIndexBy.js
create mode 100644 node_modules/lodash/sortedLastIndexOf.js
create mode 100644 node_modules/lodash/sortedUniq.js
create mode 100644 node_modules/lodash/sortedUniqBy.js
create mode 100644 node_modules/lodash/split.js
create mode 100644 node_modules/lodash/spread.js
create mode 100644 node_modules/lodash/startCase.js
create mode 100644 node_modules/lodash/startsWith.js
create mode 100644 node_modules/lodash/string.js
create mode 100644 node_modules/lodash/subtract.js
create mode 100644 node_modules/lodash/sum.js
create mode 100644 node_modules/lodash/sumBy.js
create mode 100644 node_modules/lodash/tail.js
create mode 100644 node_modules/lodash/take.js
create mode 100644 node_modules/lodash/takeRight.js
create mode 100644 node_modules/lodash/takeRightWhile.js
create mode 100644 node_modules/lodash/takeWhile.js
create mode 100644 node_modules/lodash/tap.js
create mode 100644 node_modules/lodash/template.js
create mode 100644 node_modules/lodash/templateSettings.js
create mode 100644 node_modules/lodash/throttle.js
create mode 100644 node_modules/lodash/thru.js
create mode 100644 node_modules/lodash/times.js
create mode 100644 node_modules/lodash/toArray.js
create mode 100644 node_modules/lodash/toFinite.js
create mode 100644 node_modules/lodash/toInteger.js
create mode 100644 node_modules/lodash/toIterator.js
create mode 100644 node_modules/lodash/toJSON.js
create mode 100644 node_modules/lodash/toLength.js
create mode 100644 node_modules/lodash/toLower.js
create mode 100644 node_modules/lodash/toNumber.js
create mode 100644 node_modules/lodash/toPairs.js
create mode 100644 node_modules/lodash/toPairsIn.js
create mode 100644 node_modules/lodash/toPath.js
create mode 100644 node_modules/lodash/toPlainObject.js
create mode 100644 node_modules/lodash/toSafeInteger.js
create mode 100644 node_modules/lodash/toString.js
create mode 100644 node_modules/lodash/toUpper.js
create mode 100644 node_modules/lodash/transform.js
create mode 100644 node_modules/lodash/trim.js
create mode 100644 node_modules/lodash/trimEnd.js
create mode 100644 node_modules/lodash/trimStart.js
create mode 100644 node_modules/lodash/truncate.js
create mode 100644 node_modules/lodash/unary.js
create mode 100644 node_modules/lodash/unescape.js
create mode 100644 node_modules/lodash/union.js
create mode 100644 node_modules/lodash/unionBy.js
create mode 100644 node_modules/lodash/unionWith.js
create mode 100644 node_modules/lodash/uniq.js
create mode 100644 node_modules/lodash/uniqBy.js
create mode 100644 node_modules/lodash/uniqWith.js
create mode 100644 node_modules/lodash/uniqueId.js
create mode 100644 node_modules/lodash/unset.js
create mode 100644 node_modules/lodash/unzip.js
create mode 100644 node_modules/lodash/unzipWith.js
create mode 100644 node_modules/lodash/update.js
create mode 100644 node_modules/lodash/updateWith.js
create mode 100644 node_modules/lodash/upperCase.js
create mode 100644 node_modules/lodash/upperFirst.js
create mode 100644 node_modules/lodash/util.js
create mode 100644 node_modules/lodash/value.js
create mode 100644 node_modules/lodash/valueOf.js
create mode 100644 node_modules/lodash/values.js
create mode 100644 node_modules/lodash/valuesIn.js
create mode 100644 node_modules/lodash/without.js
create mode 100644 node_modules/lodash/words.js
create mode 100644 node_modules/lodash/wrap.js
create mode 100644 node_modules/lodash/wrapperAt.js
create mode 100644 node_modules/lodash/wrapperChain.js
create mode 100644 node_modules/lodash/wrapperLodash.js
create mode 100644 node_modules/lodash/wrapperReverse.js
create mode 100644 node_modules/lodash/wrapperValue.js
create mode 100644 node_modules/lodash/xor.js
create mode 100644 node_modules/lodash/xorBy.js
create mode 100644 node_modules/lodash/xorWith.js
create mode 100644 node_modules/lodash/zip.js
create mode 100644 node_modules/lodash/zipObject.js
create mode 100644 node_modules/lodash/zipObjectDeep.js
create mode 100644 node_modules/lodash/zipWith.js
create mode 100644 node_modules/longest/LICENSE
create mode 100644 node_modules/longest/README.md
create mode 100644 node_modules/longest/index.js
create mode 100644 node_modules/longest/package.json
create mode 100644 node_modules/lru-cache/LICENSE
create mode 100644 node_modules/lru-cache/README.md
create mode 100644 node_modules/lru-cache/lib/lru-cache.js
create mode 100644 node_modules/lru-cache/package.json
create mode 100644 node_modules/lru-queue/.lint
create mode 100644 node_modules/lru-queue/.npmignore
create mode 100644 node_modules/lru-queue/.travis.yml
create mode 100644 node_modules/lru-queue/CHANGES
create mode 100644 node_modules/lru-queue/LICENCE
create mode 100644 node_modules/lru-queue/README.md
create mode 100644 node_modules/lru-queue/index.js
create mode 100644 node_modules/lru-queue/package.json
create mode 100644 node_modules/lru-queue/test/index.js
create mode 100644 node_modules/map-cache/LICENSE
create mode 100644 node_modules/map-cache/README.md
create mode 100644 node_modules/map-cache/index.js
create mode 100644 node_modules/map-cache/package.json
create mode 100644 node_modules/media-typer/HISTORY.md
create mode 100644 node_modules/media-typer/LICENSE
create mode 100644 node_modules/media-typer/README.md
create mode 100644 node_modules/media-typer/index.js
create mode 100644 node_modules/media-typer/package.json
create mode 100644 node_modules/memoizee/.lint
create mode 100644 node_modules/memoizee/.npmignore
create mode 100644 node_modules/memoizee/.testignore
create mode 100644 node_modules/memoizee/.travis.yml
create mode 100644 node_modules/memoizee/.vscode/settings.json
create mode 100644 node_modules/memoizee/CHANGES
create mode 100644 node_modules/memoizee/LICENSE
create mode 100644 node_modules/memoizee/README.md
create mode 100644 node_modules/memoizee/benchmark/fibonacci.js
create mode 100644 node_modules/memoizee/ext/async.js
create mode 100644 node_modules/memoizee/ext/dispose.js
create mode 100644 node_modules/memoizee/ext/max-age.js
create mode 100644 node_modules/memoizee/ext/max.js
create mode 100644 node_modules/memoizee/ext/promise.js
create mode 100644 node_modules/memoizee/ext/ref-counter.js
create mode 100644 node_modules/memoizee/index.js
create mode 100644 node_modules/memoizee/lib/configure-map.js
create mode 100644 node_modules/memoizee/lib/methods.js
create mode 100644 node_modules/memoizee/lib/registered-extensions.js
create mode 100644 node_modules/memoizee/lib/resolve-length.js
create mode 100644 node_modules/memoizee/lib/resolve-normalize.js
create mode 100644 node_modules/memoizee/lib/resolve-resolve.js
create mode 100644 node_modules/memoizee/lib/weak.js
create mode 100644 node_modules/memoizee/methods-plain.js
create mode 100644 node_modules/memoizee/methods.js
create mode 100644 node_modules/memoizee/normalizers/get-1.js
create mode 100644 node_modules/memoizee/normalizers/get-fixed.js
create mode 100644 node_modules/memoizee/normalizers/get-primitive-fixed.js
create mode 100644 node_modules/memoizee/normalizers/get.js
create mode 100644 node_modules/memoizee/normalizers/primitive.js
create mode 100644 node_modules/memoizee/package.json
create mode 100644 node_modules/memoizee/plain.js
create mode 100644 node_modules/memoizee/profile.js
create mode 100644 node_modules/memoizee/test/ext/async.js
create mode 100644 node_modules/memoizee/test/ext/dispose.js
create mode 100644 node_modules/memoizee/test/ext/max-age.js
create mode 100644 node_modules/memoizee/test/ext/max.js
create mode 100644 node_modules/memoizee/test/ext/promise.js
create mode 100644 node_modules/memoizee/test/ext/ref-counter.js
create mode 100644 node_modules/memoizee/test/index.js
create mode 100644 node_modules/memoizee/test/lib/configure-map.js
create mode 100644 node_modules/memoizee/test/lib/methods.js
create mode 100644 node_modules/memoizee/test/lib/registered-extensions.js
create mode 100644 node_modules/memoizee/test/lib/resolve-length.js
create mode 100644 node_modules/memoizee/test/lib/resolve-normalize.js
create mode 100644 node_modules/memoizee/test/lib/resolve-resolve.js
create mode 100644 node_modules/memoizee/test/lib/weak.js
create mode 100644 node_modules/memoizee/test/methods-plain.js
create mode 100644 node_modules/memoizee/test/methods.js
create mode 100644 node_modules/memoizee/test/normalizers/get-1.js
create mode 100644 node_modules/memoizee/test/normalizers/get-fixed.js
create mode 100644 node_modules/memoizee/test/normalizers/get-primitive-fixed.js
create mode 100644 node_modules/memoizee/test/normalizers/get.js
create mode 100644 node_modules/memoizee/test/normalizers/primitive.js
create mode 100644 node_modules/memoizee/test/plain.js
create mode 100644 node_modules/memoizee/test/profile.js
create mode 100644 node_modules/memoizee/test/weak-plain.js
create mode 100644 node_modules/memoizee/test/weak.js
create mode 100644 node_modules/memoizee/weak-plain.js
create mode 100644 node_modules/memoizee/weak.js
create mode 100644 node_modules/merge-descriptors/HISTORY.md
create mode 100644 node_modules/merge-descriptors/LICENSE
create mode 100644 node_modules/merge-descriptors/README.md
create mode 100644 node_modules/merge-descriptors/index.js
create mode 100644 node_modules/merge-descriptors/package.json
create mode 100644 node_modules/methods/HISTORY.md
create mode 100644 node_modules/methods/LICENSE
create mode 100644 node_modules/methods/README.md
create mode 100644 node_modules/methods/index.js
create mode 100644 node_modules/methods/package.json
create mode 100755 node_modules/micromatch/LICENSE
create mode 100644 node_modules/micromatch/README.md
create mode 100755 node_modules/micromatch/index.js
create mode 100644 node_modules/micromatch/lib/chars.js
create mode 100644 node_modules/micromatch/lib/expand.js
create mode 100644 node_modules/micromatch/lib/glob.js
create mode 100644 node_modules/micromatch/lib/utils.js
create mode 100644 node_modules/micromatch/package.json
create mode 100644 node_modules/mime-db/HISTORY.md
create mode 100644 node_modules/mime-db/LICENSE
create mode 100644 node_modules/mime-db/README.md
create mode 100644 node_modules/mime-db/db.json
create mode 100644 node_modules/mime-db/index.js
create mode 100644 node_modules/mime-db/package.json
create mode 100644 node_modules/mime-types/HISTORY.md
create mode 100644 node_modules/mime-types/LICENSE
create mode 100644 node_modules/mime-types/README.md
create mode 100644 node_modules/mime-types/index.js
create mode 100644 node_modules/mime-types/package.json
create mode 100644 node_modules/mime/.npmignore
create mode 100644 node_modules/mime/LICENSE
create mode 100644 node_modules/mime/README.md
create mode 100644 node_modules/mime/build/build.js
create mode 100644 node_modules/mime/build/test.js
create mode 100755 node_modules/mime/cli.js
create mode 100644 node_modules/mime/mime.js
create mode 100644 node_modules/mime/package.json
create mode 100644 node_modules/mime/types.json
create mode 100644 node_modules/minimatch/LICENSE
create mode 100644 node_modules/minimatch/README.md
create mode 100644 node_modules/minimatch/browser.js
create mode 100644 node_modules/minimatch/minimatch.js
create mode 100644 node_modules/minimatch/package.json
create mode 100644 node_modules/minimist/.travis.yml
create mode 100644 node_modules/minimist/LICENSE
create mode 100644 node_modules/minimist/example/parse.js
create mode 100644 node_modules/minimist/index.js
create mode 100644 node_modules/minimist/package.json
create mode 100644 node_modules/minimist/readme.markdown
create mode 100644 node_modules/minimist/test/dash.js
create mode 100644 node_modules/minimist/test/default_bool.js
create mode 100644 node_modules/minimist/test/dotted.js
create mode 100644 node_modules/minimist/test/long.js
create mode 100644 node_modules/minimist/test/parse.js
create mode 100644 node_modules/minimist/test/parse_modified.js
create mode 100644 node_modules/minimist/test/short.js
create mode 100644 node_modules/minimist/test/whitespace.js
create mode 100644 node_modules/mkdirp/.travis.yml
create mode 100644 node_modules/mkdirp/LICENSE
create mode 100755 node_modules/mkdirp/bin/cmd.js
create mode 100644 node_modules/mkdirp/bin/usage.txt
create mode 100644 node_modules/mkdirp/examples/pow.js
create mode 100644 node_modules/mkdirp/index.js
create mode 100644 node_modules/mkdirp/package.json
create mode 100644 node_modules/mkdirp/readme.markdown
create mode 100644 node_modules/mkdirp/test/chmod.js
create mode 100644 node_modules/mkdirp/test/clobber.js
create mode 100644 node_modules/mkdirp/test/mkdirp.js
create mode 100644 node_modules/mkdirp/test/opts_fs.js
create mode 100644 node_modules/mkdirp/test/opts_fs_sync.js
create mode 100644 node_modules/mkdirp/test/perm.js
create mode 100644 node_modules/mkdirp/test/perm_sync.js
create mode 100644 node_modules/mkdirp/test/race.js
create mode 100644 node_modules/mkdirp/test/rel.js
create mode 100644 node_modules/mkdirp/test/return.js
create mode 100644 node_modules/mkdirp/test/return_sync.js
create mode 100644 node_modules/mkdirp/test/root.js
create mode 100644 node_modules/mkdirp/test/sync.js
create mode 100644 node_modules/mkdirp/test/umask.js
create mode 100644 node_modules/mkdirp/test/umask_sync.js
create mode 100644 node_modules/moment-timezone/.npmignore
create mode 100644 node_modules/moment-timezone/LICENSE
create mode 100644 node_modules/moment-timezone/README.md
create mode 100644 node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.js
create mode 100644 node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.min.js
create mode 100644 node_modules/moment-timezone/builds/moment-timezone-with-data.js
create mode 100644 node_modules/moment-timezone/builds/moment-timezone-with-data.min.js
create mode 100644 node_modules/moment-timezone/builds/moment-timezone.min.js
create mode 100644 node_modules/moment-timezone/changelog.md
create mode 100644 node_modules/moment-timezone/composer.json
create mode 100644 node_modules/moment-timezone/data/meta/latest.json
create mode 100644 node_modules/moment-timezone/data/packed/latest.json
create mode 100644 node_modules/moment-timezone/data/unpacked/latest.json
create mode 100644 node_modules/moment-timezone/index.js
create mode 100644 node_modules/moment-timezone/moment-timezone-utils.js
create mode 100644 node_modules/moment-timezone/moment-timezone.js
create mode 100644 node_modules/moment-timezone/package.json
create mode 100644 node_modules/moment/CHANGELOG.md
create mode 100644 node_modules/moment/LICENSE
create mode 100644 node_modules/moment/README.md
create mode 100644 node_modules/moment/ender.js
create mode 100644 node_modules/moment/locale/af.js
create mode 100644 node_modules/moment/locale/ar-dz.js
create mode 100644 node_modules/moment/locale/ar-kw.js
create mode 100644 node_modules/moment/locale/ar-ly.js
create mode 100644 node_modules/moment/locale/ar-ma.js
create mode 100644 node_modules/moment/locale/ar-sa.js
create mode 100644 node_modules/moment/locale/ar-tn.js
create mode 100644 node_modules/moment/locale/ar.js
create mode 100644 node_modules/moment/locale/az.js
create mode 100644 node_modules/moment/locale/be.js
create mode 100644 node_modules/moment/locale/bg.js
create mode 100644 node_modules/moment/locale/bn.js
create mode 100644 node_modules/moment/locale/bo.js
create mode 100644 node_modules/moment/locale/br.js
create mode 100644 node_modules/moment/locale/bs.js
create mode 100644 node_modules/moment/locale/ca.js
create mode 100644 node_modules/moment/locale/cs.js
create mode 100644 node_modules/moment/locale/cv.js
create mode 100644 node_modules/moment/locale/cy.js
create mode 100644 node_modules/moment/locale/da.js
create mode 100644 node_modules/moment/locale/de-at.js
create mode 100644 node_modules/moment/locale/de-ch.js
create mode 100644 node_modules/moment/locale/de.js
create mode 100644 node_modules/moment/locale/dv.js
create mode 100644 node_modules/moment/locale/el.js
create mode 100644 node_modules/moment/locale/en-au.js
create mode 100644 node_modules/moment/locale/en-ca.js
create mode 100644 node_modules/moment/locale/en-gb.js
create mode 100644 node_modules/moment/locale/en-ie.js
create mode 100644 node_modules/moment/locale/en-nz.js
create mode 100644 node_modules/moment/locale/eo.js
create mode 100644 node_modules/moment/locale/es-do.js
create mode 100644 node_modules/moment/locale/es.js
create mode 100644 node_modules/moment/locale/et.js
create mode 100644 node_modules/moment/locale/eu.js
create mode 100644 node_modules/moment/locale/fa.js
create mode 100644 node_modules/moment/locale/fi.js
create mode 100644 node_modules/moment/locale/fo.js
create mode 100644 node_modules/moment/locale/fr-ca.js
create mode 100644 node_modules/moment/locale/fr-ch.js
create mode 100644 node_modules/moment/locale/fr.js
create mode 100644 node_modules/moment/locale/fy.js
create mode 100644 node_modules/moment/locale/gd.js
create mode 100644 node_modules/moment/locale/gl.js
create mode 100644 node_modules/moment/locale/gom-latn.js
create mode 100644 node_modules/moment/locale/he.js
create mode 100644 node_modules/moment/locale/hi.js
create mode 100644 node_modules/moment/locale/hr.js
create mode 100644 node_modules/moment/locale/hu.js
create mode 100644 node_modules/moment/locale/hy-am.js
create mode 100644 node_modules/moment/locale/id.js
create mode 100644 node_modules/moment/locale/is.js
create mode 100644 node_modules/moment/locale/it.js
create mode 100644 node_modules/moment/locale/ja.js
create mode 100644 node_modules/moment/locale/jv.js
create mode 100644 node_modules/moment/locale/ka.js
create mode 100644 node_modules/moment/locale/kk.js
create mode 100644 node_modules/moment/locale/km.js
create mode 100644 node_modules/moment/locale/kn.js
create mode 100644 node_modules/moment/locale/ko.js
create mode 100644 node_modules/moment/locale/ky.js
create mode 100644 node_modules/moment/locale/lb.js
create mode 100644 node_modules/moment/locale/lo.js
create mode 100644 node_modules/moment/locale/lt.js
create mode 100644 node_modules/moment/locale/lv.js
create mode 100644 node_modules/moment/locale/me.js
create mode 100644 node_modules/moment/locale/mi.js
create mode 100644 node_modules/moment/locale/mk.js
create mode 100644 node_modules/moment/locale/ml.js
create mode 100644 node_modules/moment/locale/mr.js
create mode 100644 node_modules/moment/locale/ms-my.js
create mode 100644 node_modules/moment/locale/ms.js
create mode 100644 node_modules/moment/locale/my.js
create mode 100644 node_modules/moment/locale/nb.js
create mode 100644 node_modules/moment/locale/ne.js
create mode 100644 node_modules/moment/locale/nl-be.js
create mode 100644 node_modules/moment/locale/nl.js
create mode 100644 node_modules/moment/locale/nn.js
create mode 100644 node_modules/moment/locale/pa-in.js
create mode 100644 node_modules/moment/locale/pl.js
create mode 100644 node_modules/moment/locale/pt-br.js
create mode 100644 node_modules/moment/locale/pt.js
create mode 100644 node_modules/moment/locale/ro.js
create mode 100644 node_modules/moment/locale/ru.js
create mode 100644 node_modules/moment/locale/sd.js
create mode 100644 node_modules/moment/locale/se.js
create mode 100644 node_modules/moment/locale/si.js
create mode 100644 node_modules/moment/locale/sk.js
create mode 100644 node_modules/moment/locale/sl.js
create mode 100644 node_modules/moment/locale/sq.js
create mode 100644 node_modules/moment/locale/sr-cyrl.js
create mode 100644 node_modules/moment/locale/sr.js
create mode 100644 node_modules/moment/locale/ss.js
create mode 100644 node_modules/moment/locale/sv.js
create mode 100644 node_modules/moment/locale/sw.js
create mode 100644 node_modules/moment/locale/ta.js
create mode 100644 node_modules/moment/locale/te.js
create mode 100644 node_modules/moment/locale/tet.js
create mode 100644 node_modules/moment/locale/th.js
create mode 100644 node_modules/moment/locale/tl-ph.js
create mode 100644 node_modules/moment/locale/tlh.js
create mode 100644 node_modules/moment/locale/tr.js
create mode 100644 node_modules/moment/locale/tzl.js
create mode 100644 node_modules/moment/locale/tzm-latn.js
create mode 100644 node_modules/moment/locale/tzm.js
create mode 100644 node_modules/moment/locale/uk.js
create mode 100644 node_modules/moment/locale/ur.js
create mode 100644 node_modules/moment/locale/uz-latn.js
create mode 100644 node_modules/moment/locale/uz.js
create mode 100644 node_modules/moment/locale/vi.js
create mode 100644 node_modules/moment/locale/x-pseudo.js
create mode 100644 node_modules/moment/locale/yo.js
create mode 100644 node_modules/moment/locale/zh-cn.js
create mode 100644 node_modules/moment/locale/zh-hk.js
create mode 100644 node_modules/moment/locale/zh-tw.js
create mode 100644 node_modules/moment/min/locales.js
create mode 100644 node_modules/moment/min/locales.min.js
create mode 100644 node_modules/moment/min/moment-with-locales.js
create mode 100644 node_modules/moment/min/moment-with-locales.min.js
create mode 100644 node_modules/moment/min/moment.min.js
create mode 100644 node_modules/moment/moment.d.ts
create mode 100644 node_modules/moment/moment.js
create mode 100644 node_modules/moment/package.js
create mode 100644 node_modules/moment/package.json
create mode 100644 node_modules/moment/src/lib/create/check-overflow.js
create mode 100644 node_modules/moment/src/lib/create/date-from-array.js
create mode 100644 node_modules/moment/src/lib/create/from-anything.js
create mode 100644 node_modules/moment/src/lib/create/from-array.js
create mode 100644 node_modules/moment/src/lib/create/from-object.js
create mode 100644 node_modules/moment/src/lib/create/from-string-and-array.js
create mode 100644 node_modules/moment/src/lib/create/from-string-and-format.js
create mode 100644 node_modules/moment/src/lib/create/from-string.js
create mode 100644 node_modules/moment/src/lib/create/local.js
create mode 100644 node_modules/moment/src/lib/create/parsing-flags.js
create mode 100644 node_modules/moment/src/lib/create/utc.js
create mode 100644 node_modules/moment/src/lib/create/valid.js
create mode 100644 node_modules/moment/src/lib/duration/abs.js
create mode 100644 node_modules/moment/src/lib/duration/add-subtract.js
create mode 100644 node_modules/moment/src/lib/duration/as.js
create mode 100644 node_modules/moment/src/lib/duration/bubble.js
create mode 100644 node_modules/moment/src/lib/duration/constructor.js
create mode 100644 node_modules/moment/src/lib/duration/create.js
create mode 100644 node_modules/moment/src/lib/duration/duration.js
create mode 100644 node_modules/moment/src/lib/duration/get.js
create mode 100644 node_modules/moment/src/lib/duration/humanize.js
create mode 100644 node_modules/moment/src/lib/duration/iso-string.js
create mode 100644 node_modules/moment/src/lib/duration/prototype.js
create mode 100644 node_modules/moment/src/lib/duration/valid.js
create mode 100644 node_modules/moment/src/lib/format/format.js
create mode 100644 node_modules/moment/src/lib/locale/base-config.js
create mode 100644 node_modules/moment/src/lib/locale/calendar.js
create mode 100644 node_modules/moment/src/lib/locale/constructor.js
create mode 100644 node_modules/moment/src/lib/locale/en.js
create mode 100644 node_modules/moment/src/lib/locale/formats.js
create mode 100644 node_modules/moment/src/lib/locale/invalid.js
create mode 100644 node_modules/moment/src/lib/locale/lists.js
create mode 100644 node_modules/moment/src/lib/locale/locale.js
create mode 100644 node_modules/moment/src/lib/locale/locales.js
create mode 100644 node_modules/moment/src/lib/locale/ordinal.js
create mode 100644 node_modules/moment/src/lib/locale/pre-post-format.js
create mode 100644 node_modules/moment/src/lib/locale/prototype.js
create mode 100644 node_modules/moment/src/lib/locale/relative.js
create mode 100644 node_modules/moment/src/lib/locale/set.js
create mode 100644 node_modules/moment/src/lib/moment/add-subtract.js
create mode 100644 node_modules/moment/src/lib/moment/calendar.js
create mode 100644 node_modules/moment/src/lib/moment/clone.js
create mode 100644 node_modules/moment/src/lib/moment/compare.js
create mode 100644 node_modules/moment/src/lib/moment/constructor.js
create mode 100644 node_modules/moment/src/lib/moment/creation-data.js
create mode 100644 node_modules/moment/src/lib/moment/diff.js
create mode 100644 node_modules/moment/src/lib/moment/format.js
create mode 100644 node_modules/moment/src/lib/moment/from.js
create mode 100644 node_modules/moment/src/lib/moment/get-set.js
create mode 100644 node_modules/moment/src/lib/moment/locale.js
create mode 100644 node_modules/moment/src/lib/moment/min-max.js
create mode 100644 node_modules/moment/src/lib/moment/moment.js
create mode 100644 node_modules/moment/src/lib/moment/now.js
create mode 100644 node_modules/moment/src/lib/moment/prototype.js
create mode 100644 node_modules/moment/src/lib/moment/start-end-of.js
create mode 100644 node_modules/moment/src/lib/moment/to-type.js
create mode 100644 node_modules/moment/src/lib/moment/to.js
create mode 100644 node_modules/moment/src/lib/moment/valid.js
create mode 100644 node_modules/moment/src/lib/parse/regex.js
create mode 100644 node_modules/moment/src/lib/parse/token.js
create mode 100644 node_modules/moment/src/lib/units/aliases.js
create mode 100644 node_modules/moment/src/lib/units/constants.js
create mode 100644 node_modules/moment/src/lib/units/day-of-month.js
create mode 100644 node_modules/moment/src/lib/units/day-of-week.js
create mode 100644 node_modules/moment/src/lib/units/day-of-year.js
create mode 100644 node_modules/moment/src/lib/units/hour.js
create mode 100644 node_modules/moment/src/lib/units/millisecond.js
create mode 100644 node_modules/moment/src/lib/units/minute.js
create mode 100644 node_modules/moment/src/lib/units/month.js
create mode 100644 node_modules/moment/src/lib/units/offset.js
create mode 100644 node_modules/moment/src/lib/units/priorities.js
create mode 100644 node_modules/moment/src/lib/units/quarter.js
create mode 100644 node_modules/moment/src/lib/units/second.js
create mode 100644 node_modules/moment/src/lib/units/timestamp.js
create mode 100644 node_modules/moment/src/lib/units/timezone.js
create mode 100644 node_modules/moment/src/lib/units/units.js
create mode 100644 node_modules/moment/src/lib/units/week-calendar-utils.js
create mode 100644 node_modules/moment/src/lib/units/week-year.js
create mode 100644 node_modules/moment/src/lib/units/week.js
create mode 100644 node_modules/moment/src/lib/units/year.js
create mode 100644 node_modules/moment/src/lib/utils/abs-ceil.js
create mode 100644 node_modules/moment/src/lib/utils/abs-floor.js
create mode 100644 node_modules/moment/src/lib/utils/abs-round.js
create mode 100644 node_modules/moment/src/lib/utils/compare-arrays.js
create mode 100644 node_modules/moment/src/lib/utils/defaults.js
create mode 100644 node_modules/moment/src/lib/utils/deprecate.js
create mode 100644 node_modules/moment/src/lib/utils/extend.js
create mode 100644 node_modules/moment/src/lib/utils/has-own-prop.js
create mode 100644 node_modules/moment/src/lib/utils/hooks.js
create mode 100644 node_modules/moment/src/lib/utils/index-of.js
create mode 100644 node_modules/moment/src/lib/utils/is-array.js
create mode 100644 node_modules/moment/src/lib/utils/is-date.js
create mode 100644 node_modules/moment/src/lib/utils/is-function.js
create mode 100644 node_modules/moment/src/lib/utils/is-number.js
create mode 100644 node_modules/moment/src/lib/utils/is-object-empty.js
create mode 100644 node_modules/moment/src/lib/utils/is-object.js
create mode 100644 node_modules/moment/src/lib/utils/is-undefined.js
create mode 100644 node_modules/moment/src/lib/utils/keys.js
create mode 100644 node_modules/moment/src/lib/utils/map.js
create mode 100644 node_modules/moment/src/lib/utils/some.js
create mode 100644 node_modules/moment/src/lib/utils/to-int.js
create mode 100644 node_modules/moment/src/lib/utils/zero-fill.js
create mode 100644 node_modules/moment/src/locale/af.js
create mode 100644 node_modules/moment/src/locale/ar-dz.js
create mode 100644 node_modules/moment/src/locale/ar-kw.js
create mode 100644 node_modules/moment/src/locale/ar-ly.js
create mode 100644 node_modules/moment/src/locale/ar-ma.js
create mode 100644 node_modules/moment/src/locale/ar-sa.js
create mode 100644 node_modules/moment/src/locale/ar-tn.js
create mode 100644 node_modules/moment/src/locale/ar.js
create mode 100644 node_modules/moment/src/locale/az.js
create mode 100644 node_modules/moment/src/locale/be.js
create mode 100644 node_modules/moment/src/locale/bg.js
create mode 100644 node_modules/moment/src/locale/bn.js
create mode 100644 node_modules/moment/src/locale/bo.js
create mode 100644 node_modules/moment/src/locale/br.js
create mode 100644 node_modules/moment/src/locale/bs.js
create mode 100644 node_modules/moment/src/locale/ca.js
create mode 100644 node_modules/moment/src/locale/cs.js
create mode 100644 node_modules/moment/src/locale/cv.js
create mode 100644 node_modules/moment/src/locale/cy.js
create mode 100644 node_modules/moment/src/locale/da.js
create mode 100644 node_modules/moment/src/locale/de-at.js
create mode 100644 node_modules/moment/src/locale/de-ch.js
create mode 100644 node_modules/moment/src/locale/de.js
create mode 100644 node_modules/moment/src/locale/dv.js
create mode 100644 node_modules/moment/src/locale/el.js
create mode 100644 node_modules/moment/src/locale/en-au.js
create mode 100644 node_modules/moment/src/locale/en-ca.js
create mode 100644 node_modules/moment/src/locale/en-gb.js
create mode 100644 node_modules/moment/src/locale/en-ie.js
create mode 100644 node_modules/moment/src/locale/en-nz.js
create mode 100644 node_modules/moment/src/locale/eo.js
create mode 100644 node_modules/moment/src/locale/es-do.js
create mode 100644 node_modules/moment/src/locale/es.js
create mode 100644 node_modules/moment/src/locale/et.js
create mode 100644 node_modules/moment/src/locale/eu.js
create mode 100644 node_modules/moment/src/locale/fa.js
create mode 100644 node_modules/moment/src/locale/fi.js
create mode 100644 node_modules/moment/src/locale/fo.js
create mode 100644 node_modules/moment/src/locale/fr-ca.js
create mode 100644 node_modules/moment/src/locale/fr-ch.js
create mode 100644 node_modules/moment/src/locale/fr.js
create mode 100644 node_modules/moment/src/locale/fy.js
create mode 100644 node_modules/moment/src/locale/gd.js
create mode 100644 node_modules/moment/src/locale/gl.js
create mode 100644 node_modules/moment/src/locale/gom-latn.js
create mode 100644 node_modules/moment/src/locale/he.js
create mode 100644 node_modules/moment/src/locale/hi.js
create mode 100644 node_modules/moment/src/locale/hr.js
create mode 100644 node_modules/moment/src/locale/hu.js
create mode 100644 node_modules/moment/src/locale/hy-am.js
create mode 100644 node_modules/moment/src/locale/id.js
create mode 100644 node_modules/moment/src/locale/is.js
create mode 100644 node_modules/moment/src/locale/it.js
create mode 100644 node_modules/moment/src/locale/ja.js
create mode 100644 node_modules/moment/src/locale/jv.js
create mode 100644 node_modules/moment/src/locale/ka.js
create mode 100644 node_modules/moment/src/locale/kk.js
create mode 100644 node_modules/moment/src/locale/km.js
create mode 100644 node_modules/moment/src/locale/kn.js
create mode 100644 node_modules/moment/src/locale/ko.js
create mode 100644 node_modules/moment/src/locale/ky.js
create mode 100644 node_modules/moment/src/locale/lb.js
create mode 100644 node_modules/moment/src/locale/lo.js
create mode 100644 node_modules/moment/src/locale/lt.js
create mode 100644 node_modules/moment/src/locale/lv.js
create mode 100644 node_modules/moment/src/locale/me.js
create mode 100644 node_modules/moment/src/locale/mi.js
create mode 100644 node_modules/moment/src/locale/mk.js
create mode 100644 node_modules/moment/src/locale/ml.js
create mode 100644 node_modules/moment/src/locale/mr.js
create mode 100644 node_modules/moment/src/locale/ms-my.js
create mode 100644 node_modules/moment/src/locale/ms.js
create mode 100644 node_modules/moment/src/locale/my.js
create mode 100644 node_modules/moment/src/locale/nb.js
create mode 100644 node_modules/moment/src/locale/ne.js
create mode 100644 node_modules/moment/src/locale/nl-be.js
create mode 100644 node_modules/moment/src/locale/nl.js
create mode 100644 node_modules/moment/src/locale/nn.js
create mode 100644 node_modules/moment/src/locale/pa-in.js
create mode 100644 node_modules/moment/src/locale/pl.js
create mode 100644 node_modules/moment/src/locale/pt-br.js
create mode 100644 node_modules/moment/src/locale/pt.js
create mode 100644 node_modules/moment/src/locale/ro.js
create mode 100644 node_modules/moment/src/locale/ru.js
create mode 100644 node_modules/moment/src/locale/sd.js
create mode 100644 node_modules/moment/src/locale/se.js
create mode 100644 node_modules/moment/src/locale/si.js
create mode 100644 node_modules/moment/src/locale/sk.js
create mode 100644 node_modules/moment/src/locale/sl.js
create mode 100644 node_modules/moment/src/locale/sq.js
create mode 100644 node_modules/moment/src/locale/sr-cyrl.js
create mode 100644 node_modules/moment/src/locale/sr.js
create mode 100644 node_modules/moment/src/locale/ss.js
create mode 100644 node_modules/moment/src/locale/sv.js
create mode 100644 node_modules/moment/src/locale/sw.js
create mode 100644 node_modules/moment/src/locale/ta.js
create mode 100644 node_modules/moment/src/locale/te.js
create mode 100644 node_modules/moment/src/locale/tet.js
create mode 100644 node_modules/moment/src/locale/th.js
create mode 100644 node_modules/moment/src/locale/tl-ph.js
create mode 100644 node_modules/moment/src/locale/tlh.js
create mode 100644 node_modules/moment/src/locale/tr.js
create mode 100644 node_modules/moment/src/locale/tzl.js
create mode 100644 node_modules/moment/src/locale/tzm-latn.js
create mode 100644 node_modules/moment/src/locale/tzm.js
create mode 100644 node_modules/moment/src/locale/uk.js
create mode 100644 node_modules/moment/src/locale/ur.js
create mode 100644 node_modules/moment/src/locale/uz-latn.js
create mode 100644 node_modules/moment/src/locale/uz.js
create mode 100644 node_modules/moment/src/locale/vi.js
create mode 100644 node_modules/moment/src/locale/x-pseudo.js
create mode 100644 node_modules/moment/src/locale/yo.js
create mode 100644 node_modules/moment/src/locale/zh-cn.js
create mode 100644 node_modules/moment/src/locale/zh-hk.js
create mode 100644 node_modules/moment/src/locale/zh-tw.js
create mode 100644 node_modules/moment/src/moment.js
create mode 100644 node_modules/morgan/HISTORY.md
create mode 100644 node_modules/morgan/LICENSE
create mode 100644 node_modules/morgan/README.md
create mode 100644 node_modules/morgan/index.js
create mode 100644 node_modules/morgan/node_modules/debug/.jshintrc
create mode 100644 node_modules/morgan/node_modules/debug/.npmignore
create mode 100644 node_modules/morgan/node_modules/debug/History.md
create mode 100644 node_modules/morgan/node_modules/debug/Makefile
create mode 100644 node_modules/morgan/node_modules/debug/Readme.md
create mode 100644 node_modules/morgan/node_modules/debug/bower.json
create mode 100644 node_modules/morgan/node_modules/debug/browser.js
create mode 100644 node_modules/morgan/node_modules/debug/component.json
create mode 100644 node_modules/morgan/node_modules/debug/debug.js
create mode 100644 node_modules/morgan/node_modules/debug/node.js
create mode 100644 node_modules/morgan/node_modules/debug/package.json
create mode 100644 node_modules/morgan/node_modules/ms/.npmignore
create mode 100644 node_modules/morgan/node_modules/ms/History.md
create mode 100644 node_modules/morgan/node_modules/ms/LICENSE
create mode 100644 node_modules/morgan/node_modules/ms/README.md
create mode 100644 node_modules/morgan/node_modules/ms/index.js
create mode 100644 node_modules/morgan/node_modules/ms/package.json
create mode 100644 node_modules/morgan/package.json
create mode 100644 node_modules/ms/LICENSE.md
create mode 100644 node_modules/ms/README.md
create mode 100644 node_modules/ms/index.js
create mode 100644 node_modules/ms/package.json
create mode 100644 node_modules/multipipe/.npmignore
create mode 100644 node_modules/multipipe/.travis.yml
create mode 100644 node_modules/multipipe/History.md
create mode 100644 node_modules/multipipe/Makefile
create mode 100644 node_modules/multipipe/Readme.md
create mode 100644 node_modules/multipipe/index.js
create mode 100644 node_modules/multipipe/package.json
create mode 100644 node_modules/multipipe/test/multipipe.js
create mode 100644 node_modules/natives/README.md
create mode 100644 node_modules/natives/index.js
create mode 100644 node_modules/natives/package.json
create mode 100644 node_modules/negotiator/HISTORY.md
create mode 100644 node_modules/negotiator/LICENSE
create mode 100644 node_modules/negotiator/README.md
create mode 100644 node_modules/negotiator/index.js
create mode 100644 node_modules/negotiator/lib/charset.js
create mode 100644 node_modules/negotiator/lib/encoding.js
create mode 100644 node_modules/negotiator/lib/language.js
create mode 100644 node_modules/negotiator/lib/mediaType.js
create mode 100644 node_modules/negotiator/package.json
create mode 100644 node_modules/next-tick/.lint
create mode 100644 node_modules/next-tick/.npmignore
create mode 100644 node_modules/next-tick/.travis.yml
create mode 100644 node_modules/next-tick/CHANGES
create mode 100644 node_modules/next-tick/LICENSE
create mode 100644 node_modules/next-tick/README.md
create mode 100644 node_modules/next-tick/index.js
create mode 100644 node_modules/next-tick/package.json
create mode 100644 node_modules/next-tick/test/index.js
create mode 100644 node_modules/nopt/.npmignore
create mode 100644 node_modules/nopt/.travis.yml
create mode 100644 node_modules/nopt/LICENSE
create mode 100644 node_modules/nopt/README.md
create mode 100755 node_modules/nopt/bin/nopt.js
create mode 100755 node_modules/nopt/examples/my-program.js
create mode 100644 node_modules/nopt/lib/nopt.js
create mode 100644 node_modules/nopt/package.json
create mode 100644 node_modules/nopt/test/basic.js
create mode 100644 node_modules/normalize-package-data/AUTHORS
create mode 100644 node_modules/normalize-package-data/LICENSE
create mode 100644 node_modules/normalize-package-data/README.md
create mode 100644 node_modules/normalize-package-data/lib/extract_description.js
create mode 100644 node_modules/normalize-package-data/lib/fixer.js
create mode 100644 node_modules/normalize-package-data/lib/make_warning.js
create mode 100644 node_modules/normalize-package-data/lib/normalize.js
create mode 100644 node_modules/normalize-package-data/lib/safe_format.js
create mode 100644 node_modules/normalize-package-data/lib/typos.json
create mode 100644 node_modules/normalize-package-data/lib/warning_messages.json
create mode 100644 node_modules/normalize-package-data/package.json
create mode 100644 node_modules/normalize-path/LICENSE
create mode 100644 node_modules/normalize-path/README.md
create mode 100644 node_modules/normalize-path/index.js
create mode 100644 node_modules/normalize-path/package.json
create mode 100644 node_modules/number-is-nan/index.js
create mode 100644 node_modules/number-is-nan/license
create mode 100644 node_modules/number-is-nan/package.json
create mode 100644 node_modules/number-is-nan/readme.md
create mode 100644 node_modules/object-assign/index.js
create mode 100644 node_modules/object-assign/license
create mode 100644 node_modules/object-assign/package.json
create mode 100644 node_modules/object-assign/readme.md
create mode 100644 node_modules/object.omit/LICENSE
create mode 100644 node_modules/object.omit/README.md
create mode 100644 node_modules/object.omit/index.js
create mode 100644 node_modules/object.omit/package.json
create mode 100644 node_modules/on-finished/HISTORY.md
create mode 100644 node_modules/on-finished/LICENSE
create mode 100644 node_modules/on-finished/README.md
create mode 100644 node_modules/on-finished/index.js
create mode 100644 node_modules/on-finished/package.json
create mode 100644 node_modules/on-headers/HISTORY.md
create mode 100644 node_modules/on-headers/LICENSE
create mode 100644 node_modules/on-headers/README.md
create mode 100644 node_modules/on-headers/index.js
create mode 100644 node_modules/on-headers/package.json
create mode 100644 node_modules/once/LICENSE
create mode 100644 node_modules/once/README.md
create mode 100644 node_modules/once/once.js
create mode 100644 node_modules/once/package.json
create mode 100644 node_modules/optimist/.travis.yml
create mode 100644 node_modules/optimist/LICENSE
create mode 100644 node_modules/optimist/example/bool.js
create mode 100644 node_modules/optimist/example/boolean_double.js
create mode 100644 node_modules/optimist/example/boolean_single.js
create mode 100644 node_modules/optimist/example/default_hash.js
create mode 100644 node_modules/optimist/example/default_singles.js
create mode 100644 node_modules/optimist/example/divide.js
create mode 100644 node_modules/optimist/example/line_count.js
create mode 100644 node_modules/optimist/example/line_count_options.js
create mode 100644 node_modules/optimist/example/line_count_wrap.js
create mode 100644 node_modules/optimist/example/nonopt.js
create mode 100644 node_modules/optimist/example/reflect.js
create mode 100644 node_modules/optimist/example/short.js
create mode 100644 node_modules/optimist/example/string.js
create mode 100644 node_modules/optimist/example/usage-options.js
create mode 100644 node_modules/optimist/example/xup.js
create mode 100644 node_modules/optimist/index.js
create mode 100644 node_modules/optimist/package.json
create mode 100644 node_modules/optimist/readme.markdown
create mode 100644 node_modules/optimist/test/_.js
create mode 100644 node_modules/optimist/test/_/argv.js
create mode 100755 node_modules/optimist/test/_/bin.js
create mode 100644 node_modules/optimist/test/parse.js
create mode 100644 node_modules/optimist/test/usage.js
create mode 100644 node_modules/orchestrator/.npmignore
create mode 100644 node_modules/orchestrator/LICENSE
create mode 100644 node_modules/orchestrator/README.md
create mode 100644 node_modules/orchestrator/index.js
create mode 100644 node_modules/orchestrator/lib/runTask.js
create mode 100644 node_modules/orchestrator/package.json
create mode 100644 node_modules/ordered-read-streams/.npmignore
create mode 100644 node_modules/ordered-read-streams/.travis.yml
create mode 100644 node_modules/ordered-read-streams/LICENSE
create mode 100644 node_modules/ordered-read-streams/README.md
create mode 100644 node_modules/ordered-read-streams/index.js
create mode 100644 node_modules/ordered-read-streams/package.json
create mode 100644 node_modules/ordered-read-streams/test/main.js
create mode 100644 node_modules/os-homedir/index.js
create mode 100644 node_modules/os-homedir/license
create mode 100644 node_modules/os-homedir/package.json
create mode 100644 node_modules/os-homedir/readme.md
create mode 100644 node_modules/os-locale/index.js
create mode 100644 node_modules/os-locale/license
create mode 100644 node_modules/os-locale/package.json
create mode 100644 node_modules/os-locale/readme.md
create mode 100644 node_modules/packet-reader/.npmignore
create mode 100644 node_modules/packet-reader/index.js
create mode 100644 node_modules/packet-reader/package.json
create mode 100644 node_modules/packet-reader/test/index.js
create mode 100644 node_modules/parse-filepath/LICENSE
create mode 100644 node_modules/parse-filepath/README.md
create mode 100644 node_modules/parse-filepath/index.js
create mode 100644 node_modules/parse-filepath/package.json
create mode 100644 node_modules/parse-glob/LICENSE
create mode 100644 node_modules/parse-glob/README.md
create mode 100644 node_modules/parse-glob/index.js
create mode 100644 node_modules/parse-glob/package.json
create mode 100644 node_modules/parse-json/index.js
create mode 100644 node_modules/parse-json/license
create mode 100644 node_modules/parse-json/package.json
create mode 100644 node_modules/parse-json/readme.md
create mode 100644 node_modules/parse-json/vendor/parse.js
create mode 100644 node_modules/parse-json/vendor/unicode.js
create mode 100644 node_modules/parse-passwd/LICENSE
create mode 100644 node_modules/parse-passwd/README.md
create mode 100644 node_modules/parse-passwd/index.js
create mode 100644 node_modules/parse-passwd/package.json
create mode 100644 node_modules/parseurl/HISTORY.md
create mode 100644 node_modules/parseurl/LICENSE
create mode 100644 node_modules/parseurl/README.md
create mode 100644 node_modules/parseurl/index.js
create mode 100644 node_modules/parseurl/package.json
create mode 100644 node_modules/path-exists/index.js
create mode 100644 node_modules/path-exists/license
create mode 100644 node_modules/path-exists/package.json
create mode 100644 node_modules/path-exists/readme.md
create mode 100644 node_modules/path-parse/.travis.yml
create mode 100644 node_modules/path-parse/README.md
create mode 100644 node_modules/path-parse/index.js
create mode 100644 node_modules/path-parse/index.min.js
create mode 100644 node_modules/path-parse/package.json
create mode 100644 node_modules/path-parse/test.js
create mode 100644 node_modules/path-parse/test.min.js
create mode 100644 node_modules/path-root-regex/LICENSE
create mode 100644 node_modules/path-root-regex/README.md
create mode 100644 node_modules/path-root-regex/index.js
create mode 100644 node_modules/path-root-regex/package.json
create mode 100644 node_modules/path-root/LICENSE
create mode 100644 node_modules/path-root/README.md
create mode 100644 node_modules/path-root/index.js
create mode 100644 node_modules/path-root/package.json
create mode 100644 node_modules/path-to-regexp/History.md
create mode 100644 node_modules/path-to-regexp/LICENSE
create mode 100644 node_modules/path-to-regexp/Readme.md
create mode 100644 node_modules/path-to-regexp/index.js
create mode 100644 node_modules/path-to-regexp/package.json
create mode 100644 node_modules/path-type/index.js
create mode 100644 node_modules/path-type/license
create mode 100644 node_modules/path-type/package.json
create mode 100644 node_modules/path-type/readme.md
create mode 100644 node_modules/pg-connection-string/.npmignore
create mode 100644 node_modules/pg-connection-string/.travis.yml
create mode 100644 node_modules/pg-connection-string/LICENSE
create mode 100644 node_modules/pg-connection-string/README.md
create mode 100644 node_modules/pg-connection-string/index.js
create mode 100644 node_modules/pg-connection-string/package.json
create mode 100644 node_modules/pg-connection-string/test/parse.js
create mode 100644 node_modules/pg-pool/.npmignore
create mode 100644 node_modules/pg-pool/.travis.yml
create mode 100644 node_modules/pg-pool/Makefile
create mode 100644 node_modules/pg-pool/README.md
create mode 100644 node_modules/pg-pool/index.js
create mode 100644 node_modules/pg-pool/package.json
create mode 100644 node_modules/pg-pool/test/events.js
create mode 100644 node_modules/pg-pool/test/index.js
create mode 100644 node_modules/pg-pool/test/logging.js
create mode 100644 node_modules/pg-pool/test/mocha.opts
create mode 100644 node_modules/pg-types/.npmignore
create mode 100644 node_modules/pg-types/.travis.yml
create mode 100644 node_modules/pg-types/Makefile
create mode 100644 node_modules/pg-types/README.md
create mode 100644 node_modules/pg-types/index.js
create mode 100644 node_modules/pg-types/lib/arrayParser.js
create mode 100644 node_modules/pg-types/lib/binaryParsers.js
create mode 100644 node_modules/pg-types/lib/textParsers.js
create mode 100644 node_modules/pg-types/package.json
create mode 100644 node_modules/pg-types/test/index.js
create mode 100644 node_modules/pg-types/test/types.js
create mode 100644 node_modules/pg/.jshintrc
create mode 100644 node_modules/pg/.npmignore
create mode 100644 node_modules/pg/.travis.yml
create mode 100644 node_modules/pg/CHANGELOG.md
create mode 100644 node_modules/pg/Makefile
create mode 100644 node_modules/pg/README.md
create mode 100644 node_modules/pg/lib/client.js
create mode 100644 node_modules/pg/lib/connection-parameters.js
create mode 100644 node_modules/pg/lib/connection.js
create mode 100644 node_modules/pg/lib/defaults.js
create mode 100644 node_modules/pg/lib/index.js
create mode 100644 node_modules/pg/lib/native/index.js
create mode 100644 node_modules/pg/lib/native/query.js
create mode 100644 node_modules/pg/lib/native/result.js
create mode 100644 node_modules/pg/lib/pool-factory.js
create mode 100644 node_modules/pg/lib/query.js
create mode 100644 node_modules/pg/lib/result.js
create mode 100644 node_modules/pg/lib/type-overrides.js
create mode 100644 node_modules/pg/lib/utils.js
create mode 100644 node_modules/pg/package.json
create mode 100644 node_modules/pgpass/.jshintrc
create mode 100644 node_modules/pgpass/.npmignore
create mode 100644 node_modules/pgpass/.travis.yml
create mode 100644 node_modules/pgpass/README.md
create mode 100644 node_modules/pgpass/coverage.json
create mode 100644 node_modules/pgpass/lib/helper.js
create mode 100644 node_modules/pgpass/lib/index.js
create mode 100644 node_modules/pgpass/package.json
create mode 100644 node_modules/pgpass/test/#1 de-escaping.js
create mode 100644 node_modules/pgpass/test/#1 escaping.js
create mode 100644 node_modules/pgpass/test/#6 too many open files.js
create mode 100644 node_modules/pgpass/test/_pgpass
create mode 100644 node_modules/pgpass/test/helper.js
create mode 100644 node_modules/pgpass/test/index.js
create mode 100644 node_modules/pgpass/test/integration/#1 escaping.js
create mode 100644 node_modules/pify/index.js
create mode 100644 node_modules/pify/license
create mode 100644 node_modules/pify/package.json
create mode 100644 node_modules/pify/readme.md
create mode 100644 node_modules/pinkie-promise/index.js
create mode 100644 node_modules/pinkie-promise/license
create mode 100644 node_modules/pinkie-promise/package.json
create mode 100644 node_modules/pinkie-promise/readme.md
create mode 100644 node_modules/pinkie/index.js
create mode 100644 node_modules/pinkie/license
create mode 100644 node_modules/pinkie/package.json
create mode 100644 node_modules/pinkie/readme.md
create mode 100644 node_modules/postgres-array/index.js
create mode 100644 node_modules/postgres-array/license
create mode 100644 node_modules/postgres-array/package.json
create mode 100644 node_modules/postgres-array/readme.md
create mode 100644 node_modules/postgres-bytea/index.js
create mode 100644 node_modules/postgres-bytea/license
create mode 100644 node_modules/postgres-bytea/package.json
create mode 100644 node_modules/postgres-bytea/readme.md
create mode 100644 node_modules/postgres-date/index.js
create mode 100644 node_modules/postgres-date/license
create mode 100644 node_modules/postgres-date/package.json
create mode 100644 node_modules/postgres-date/readme.md
create mode 100644 node_modules/postgres-interval/index.js
create mode 100644 node_modules/postgres-interval/license
create mode 100644 node_modules/postgres-interval/package.json
create mode 100644 node_modules/postgres-interval/readme.md
create mode 100644 node_modules/preserve/.gitattributes
create mode 100644 node_modules/preserve/.jshintrc
create mode 100644 node_modules/preserve/.npmignore
create mode 100644 node_modules/preserve/.travis.yml
create mode 100644 node_modules/preserve/.verb.md
create mode 100644 node_modules/preserve/LICENSE
create mode 100644 node_modules/preserve/README.md
create mode 100644 node_modules/preserve/index.js
create mode 100644 node_modules/preserve/package.json
create mode 100644 node_modules/preserve/test.js
create mode 100644 node_modules/pretty-hrtime/.jshintignore
create mode 100644 node_modules/pretty-hrtime/.npmignore
create mode 100644 node_modules/pretty-hrtime/LICENSE
create mode 100644 node_modules/pretty-hrtime/README.md
create mode 100644 node_modules/pretty-hrtime/index.js
create mode 100644 node_modules/pretty-hrtime/package.json
create mode 100644 node_modules/process-nextick-args/.travis.yml
create mode 100644 node_modules/process-nextick-args/index.js
create mode 100644 node_modules/process-nextick-args/license.md
create mode 100644 node_modules/process-nextick-args/package.json
create mode 100644 node_modules/process-nextick-args/readme.md
create mode 100644 node_modules/process-nextick-args/test.js
create mode 100644 node_modules/promise/.jshintrc
create mode 100644 node_modules/promise/.npmignore
create mode 100644 node_modules/promise/LICENSE
create mode 100644 node_modules/promise/Readme.md
create mode 100644 node_modules/promise/core.js
create mode 100644 node_modules/promise/index.js
create mode 100644 node_modules/promise/lib/core.js
create mode 100644 node_modules/promise/lib/done.js
create mode 100644 node_modules/promise/lib/es6-extensions.js
create mode 100644 node_modules/promise/lib/node-extensions.js
create mode 100644 node_modules/promise/package.json
create mode 100644 node_modules/promise/polyfill-done.js
create mode 100644 node_modules/promise/polyfill.js
create mode 100644 node_modules/proto-list/LICENSE
create mode 100644 node_modules/proto-list/README.md
create mode 100644 node_modules/proto-list/package.json
create mode 100644 node_modules/proto-list/proto-list.js
create mode 100644 node_modules/proto-list/test/basic.js
create mode 100644 node_modules/proxy-addr/HISTORY.md
create mode 100644 node_modules/proxy-addr/LICENSE
create mode 100644 node_modules/proxy-addr/README.md
create mode 100644 node_modules/proxy-addr/index.js
create mode 100644 node_modules/proxy-addr/package.json
create mode 100644 node_modules/pseudomap/LICENSE
create mode 100644 node_modules/pseudomap/README.md
create mode 100644 node_modules/pseudomap/map.js
create mode 100644 node_modules/pseudomap/package.json
create mode 100644 node_modules/pseudomap/pseudomap.js
create mode 100644 node_modules/pseudomap/test/basic.js
create mode 100644 node_modules/qs/.eslintignore
create mode 100644 node_modules/qs/.eslintrc
create mode 100644 node_modules/qs/CHANGELOG.md
create mode 100644 node_modules/qs/CONTRIBUTING.md
create mode 100644 node_modules/qs/LICENSE
create mode 100644 node_modules/qs/README.md
create mode 100644 node_modules/qs/dist/qs.js
create mode 100755 node_modules/qs/lib/index.js
create mode 100755 node_modules/qs/lib/parse.js
create mode 100755 node_modules/qs/lib/stringify.js
create mode 100755 node_modules/qs/lib/utils.js
create mode 100644 node_modules/qs/package.json
create mode 100644 node_modules/qs/test/index.js
create mode 100755 node_modules/qs/test/parse.js
create mode 100755 node_modules/qs/test/stringify.js
create mode 100755 node_modules/qs/test/utils.js
create mode 100755 node_modules/randomatic/LICENSE
create mode 100644 node_modules/randomatic/README.md
create mode 100644 node_modules/randomatic/index.js
create mode 100644 node_modules/randomatic/package.json
create mode 100644 node_modules/range-parser/HISTORY.md
create mode 100644 node_modules/range-parser/LICENSE
create mode 100644 node_modules/range-parser/README.md
create mode 100644 node_modules/range-parser/index.js
create mode 100644 node_modules/range-parser/package.json
create mode 100644 node_modules/raw-body/HISTORY.md
create mode 100644 node_modules/raw-body/LICENSE
create mode 100644 node_modules/raw-body/README.md
create mode 100644 node_modules/raw-body/index.js
create mode 100644 node_modules/raw-body/package.json
create mode 100644 node_modules/read-pkg-up/index.js
create mode 100644 node_modules/read-pkg-up/license
create mode 100644 node_modules/read-pkg-up/package.json
create mode 100644 node_modules/read-pkg-up/readme.md
create mode 100644 node_modules/read-pkg/index.js
create mode 100644 node_modules/read-pkg/license
create mode 100644 node_modules/read-pkg/package.json
create mode 100644 node_modules/read-pkg/readme.md
create mode 100644 node_modules/readable-stream/.npmignore
create mode 100644 node_modules/readable-stream/LICENSE
create mode 100644 node_modules/readable-stream/README.md
create mode 100644 node_modules/readable-stream/duplex.js
create mode 100644 node_modules/readable-stream/float.patch
create mode 100644 node_modules/readable-stream/lib/_stream_duplex.js
create mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js
create mode 100644 node_modules/readable-stream/lib/_stream_readable.js
create mode 100644 node_modules/readable-stream/lib/_stream_transform.js
create mode 100644 node_modules/readable-stream/lib/_stream_writable.js
create mode 100644 node_modules/readable-stream/node_modules/isarray/README.md
create mode 100644 node_modules/readable-stream/node_modules/isarray/build/build.js
create mode 100644 node_modules/readable-stream/node_modules/isarray/component.json
create mode 100644 node_modules/readable-stream/node_modules/isarray/index.js
create mode 100644 node_modules/readable-stream/node_modules/isarray/package.json
create mode 100644 node_modules/readable-stream/package.json
create mode 100644 node_modules/readable-stream/passthrough.js
create mode 100644 node_modules/readable-stream/readable.js
create mode 100644 node_modules/readable-stream/transform.js
create mode 100644 node_modules/readable-stream/writable.js
create mode 100644 node_modules/rechoir/.npmignore
create mode 100644 node_modules/rechoir/.travis.yml
create mode 100644 node_modules/rechoir/CHANGELOG
create mode 100644 node_modules/rechoir/LICENSE
create mode 100644 node_modules/rechoir/README.md
create mode 100644 node_modules/rechoir/index.js
create mode 100644 node_modules/rechoir/lib/extension.js
create mode 100644 node_modules/rechoir/lib/normalize.js
create mode 100644 node_modules/rechoir/lib/register.js
create mode 100644 node_modules/rechoir/package.json
create mode 100644 node_modules/redefine/.gitattributes
create mode 100644 node_modules/redefine/.npmignore
create mode 100644 node_modules/redefine/.travis.yml
create mode 100644 node_modules/redefine/HOWTO.md
create mode 100644 node_modules/redefine/LICENSE.txt
create mode 100644 node_modules/redefine/README.md
create mode 100644 node_modules/redefine/build/redefine.js
create mode 100644 node_modules/redefine/build/redefine.max.js
create mode 100644 node_modules/redefine/package.json
create mode 100644 node_modules/redefine/template/license.after
create mode 100644 node_modules/redefine/template/license.before
create mode 100644 node_modules/regex-cache/LICENSE
create mode 100644 node_modules/regex-cache/README.md
create mode 100644 node_modules/regex-cache/index.js
create mode 100644 node_modules/regex-cache/package.json
create mode 100644 node_modules/remove-trailing-separator/history.md
create mode 100644 node_modules/remove-trailing-separator/index.js
create mode 100644 node_modules/remove-trailing-separator/license
create mode 100644 node_modules/remove-trailing-separator/package.json
create mode 100644 node_modules/remove-trailing-separator/readme.md
create mode 100644 node_modules/repeat-element/LICENSE
create mode 100644 node_modules/repeat-element/README.md
create mode 100644 node_modules/repeat-element/index.js
create mode 100644 node_modules/repeat-element/package.json
create mode 100644 node_modules/repeat-string/LICENSE
create mode 100644 node_modules/repeat-string/README.md
create mode 100644 node_modules/repeat-string/index.js
create mode 100644 node_modules/repeat-string/package.json
create mode 100644 node_modules/replace-ext/.npmignore
create mode 100644 node_modules/replace-ext/.travis.yml
create mode 100755 node_modules/replace-ext/LICENSE
create mode 100644 node_modules/replace-ext/README.md
create mode 100644 node_modules/replace-ext/index.js
create mode 100644 node_modules/replace-ext/package.json
create mode 100644 node_modules/replace-ext/test/main.js
create mode 100644 node_modules/require-directory/.jshintrc
create mode 100644 node_modules/require-directory/.npmignore
create mode 100644 node_modules/require-directory/.travis.yml
create mode 100644 node_modules/require-directory/LICENSE
create mode 100644 node_modules/require-directory/README.markdown
create mode 100644 node_modules/require-directory/index.js
create mode 100644 node_modules/require-directory/package.json
create mode 100644 node_modules/require-main-filename/.npmignore
create mode 100644 node_modules/require-main-filename/.travis.yml
create mode 100644 node_modules/require-main-filename/LICENSE.txt
create mode 100644 node_modules/require-main-filename/README.md
create mode 100644 node_modules/require-main-filename/index.js
create mode 100644 node_modules/require-main-filename/package.json
create mode 100644 node_modules/require-main-filename/test.js
create mode 100644 node_modules/resolve-dir/LICENSE
create mode 100644 node_modules/resolve-dir/README.md
create mode 100644 node_modules/resolve-dir/index.js
create mode 100644 node_modules/resolve-dir/package.json
create mode 100644 node_modules/resolve/.eslintignore
create mode 100644 node_modules/resolve/.eslintrc
create mode 100644 node_modules/resolve/.npmignore
create mode 100644 node_modules/resolve/.travis.yml
create mode 100644 node_modules/resolve/LICENSE
create mode 100644 node_modules/resolve/appveyor.yml
create mode 100644 node_modules/resolve/example/async.js
create mode 100644 node_modules/resolve/example/sync.js
create mode 100644 node_modules/resolve/index.js
create mode 100644 node_modules/resolve/lib/async.js
create mode 100644 node_modules/resolve/lib/caller.js
create mode 100644 node_modules/resolve/lib/core.js
create mode 100644 node_modules/resolve/lib/core.json
create mode 100644 node_modules/resolve/lib/node-modules-paths.js
create mode 100644 node_modules/resolve/lib/sync.js
create mode 100644 node_modules/resolve/package.json
create mode 100644 node_modules/resolve/readme.markdown
create mode 100644 node_modules/resolve/test/core.js
create mode 100644 node_modules/resolve/test/dotdot.js
create mode 100644 node_modules/resolve/test/dotdot/abc/index.js
create mode 100644 node_modules/resolve/test/dotdot/index.js
create mode 100644 node_modules/resolve/test/faulty_basedir.js
create mode 100644 node_modules/resolve/test/filter.js
create mode 100644 node_modules/resolve/test/filter_sync.js
create mode 100644 node_modules/resolve/test/mock.js
create mode 100644 node_modules/resolve/test/mock_sync.js
create mode 100644 node_modules/resolve/test/module_dir.js
create mode 100644 node_modules/resolve/test/module_dir/xmodules/aaa/index.js
create mode 100644 node_modules/resolve/test/module_dir/ymodules/aaa/index.js
create mode 100644 node_modules/resolve/test/module_dir/zmodules/bbb/main.js
create mode 100644 node_modules/resolve/test/module_dir/zmodules/bbb/package.json
create mode 100644 node_modules/resolve/test/node-modules-paths.js
create mode 100644 node_modules/resolve/test/node_path.js
create mode 100644 node_modules/resolve/test/node_path/x/aaa/index.js
create mode 100644 node_modules/resolve/test/node_path/x/ccc/index.js
create mode 100644 node_modules/resolve/test/node_path/y/bbb/index.js
create mode 100644 node_modules/resolve/test/node_path/y/ccc/index.js
create mode 100644 node_modules/resolve/test/nonstring.js
create mode 100644 node_modules/resolve/test/pathfilter.js
create mode 100644 node_modules/resolve/test/pathfilter/deep_ref/main.js
create mode 100644 node_modules/resolve/test/precedence.js
create mode 100644 node_modules/resolve/test/precedence/aaa.js
create mode 100644 node_modules/resolve/test/precedence/aaa/index.js
create mode 100644 node_modules/resolve/test/precedence/aaa/main.js
create mode 100644 node_modules/resolve/test/precedence/bbb.js
create mode 100644 node_modules/resolve/test/precedence/bbb/main.js
create mode 100644 node_modules/resolve/test/resolver.js
create mode 100644 node_modules/resolve/test/resolver/baz/doom.js
create mode 100644 node_modules/resolve/test/resolver/baz/package.json
create mode 100644 node_modules/resolve/test/resolver/baz/quux.js
create mode 100644 node_modules/resolve/test/resolver/cup.coffee
create mode 100644 node_modules/resolve/test/resolver/foo.js
create mode 100644 node_modules/resolve/test/resolver/incorrect_main/index.js
create mode 100644 node_modules/resolve/test/resolver/incorrect_main/package.json
create mode 100644 node_modules/resolve/test/resolver/mug.coffee
create mode 100644 node_modules/resolve/test/resolver/mug.js
create mode 100644 node_modules/resolve/test/resolver/other_path/lib/other-lib.js
create mode 100644 node_modules/resolve/test/resolver/other_path/root.js
create mode 100644 node_modules/resolve/test/resolver/quux/foo/index.js
create mode 100644 node_modules/resolve/test/resolver/same_names/foo.js
create mode 100644 node_modules/resolve/test/resolver/same_names/foo/index.js
create mode 100644 node_modules/resolve/test/resolver/without_basedir/main.js
create mode 100644 node_modules/resolve/test/resolver_sync.js
create mode 100644 node_modules/resolve/test/subdirs.js
create mode 100644 node_modules/retry-as-promised/.npmignore
create mode 100644 node_modules/retry-as-promised/LICENSE
create mode 100644 node_modules/retry-as-promised/README.md
create mode 100644 node_modules/retry-as-promised/index.js
create mode 100644 node_modules/retry-as-promised/package.json
create mode 100644 node_modules/retry-as-promised/test/bluebird.test.js
create mode 100644 node_modules/right-align/LICENSE
create mode 100644 node_modules/right-align/README.md
create mode 100644 node_modules/right-align/index.js
create mode 100644 node_modules/right-align/package.json
create mode 100644 node_modules/semver/.npmignore
create mode 100644 node_modules/semver/LICENSE
create mode 100644 node_modules/semver/Makefile
create mode 100644 node_modules/semver/README.md
create mode 100755 node_modules/semver/bin/semver
create mode 100644 node_modules/semver/foot.js.txt
create mode 100644 node_modules/semver/head.js.txt
create mode 100644 node_modules/semver/package.json
create mode 100644 node_modules/semver/semver.browser.js
create mode 100644 node_modules/semver/semver.browser.js.gz
create mode 100644 node_modules/semver/semver.js
create mode 100644 node_modules/semver/semver.min.js
create mode 100644 node_modules/semver/semver.min.js.gz
create mode 100644 node_modules/semver/test/amd.js
create mode 100644 node_modules/semver/test/big-numbers.js
create mode 100644 node_modules/semver/test/clean.js
create mode 100644 node_modules/semver/test/gtr.js
create mode 100644 node_modules/semver/test/index.js
create mode 100644 node_modules/semver/test/ltr.js
create mode 100644 node_modules/semver/test/major-minor-patch.js
create mode 100644 node_modules/semver/test/no-module.js
create mode 100644 node_modules/send/HISTORY.md
create mode 100644 node_modules/send/LICENSE
create mode 100644 node_modules/send/README.md
create mode 100644 node_modules/send/index.js
create mode 100644 node_modules/send/node_modules/debug/.jshintrc
create mode 100644 node_modules/send/node_modules/debug/.npmignore
create mode 100644 node_modules/send/node_modules/debug/History.md
create mode 100644 node_modules/send/node_modules/debug/Makefile
create mode 100644 node_modules/send/node_modules/debug/Readme.md
create mode 100644 node_modules/send/node_modules/debug/bower.json
create mode 100644 node_modules/send/node_modules/debug/browser.js
create mode 100644 node_modules/send/node_modules/debug/component.json
create mode 100644 node_modules/send/node_modules/debug/debug.js
create mode 100644 node_modules/send/node_modules/debug/node.js
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/.npmignore
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/History.md
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/LICENSE
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/README.md
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/index.js
create mode 100644 node_modules/send/node_modules/debug/node_modules/ms/package.json
create mode 100644 node_modules/send/node_modules/debug/package.json
create mode 100644 node_modules/send/package.json
create mode 100644 node_modules/sequelize-cli/.editorconfig
create mode 100644 node_modules/sequelize-cli/.jscsrc
create mode 100644 node_modules/sequelize-cli/.jshintrc
create mode 100644 node_modules/sequelize-cli/.mention-bot
create mode 100644 node_modules/sequelize-cli/.npmignore
create mode 100644 node_modules/sequelize-cli/.travis.yml
create mode 100644 node_modules/sequelize-cli/CHANGELOG.md
create mode 100644 node_modules/sequelize-cli/LICENSE
create mode 100644 node_modules/sequelize-cli/README.md
create mode 100755 node_modules/sequelize-cli/bin/get-env-matrix
create mode 100755 node_modules/sequelize-cli/bin/sequelize
create mode 100644 node_modules/sequelize-cli/gulpfile.js
create mode 100644 node_modules/sequelize-cli/lib/assets/migrations/create-table.js
create mode 100644 node_modules/sequelize-cli/lib/assets/migrations/skeleton.js
create mode 100644 node_modules/sequelize-cli/lib/assets/models/index.js
create mode 100644 node_modules/sequelize-cli/lib/assets/models/model.js
create mode 100644 node_modules/sequelize-cli/lib/assets/seeders/skeleton.js
create mode 100644 node_modules/sequelize-cli/lib/gulpfile.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/asset-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/config-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/generic-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/gulp-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/index.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/init-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/log-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/migration-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/model-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/path-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/template-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/umzug-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/version-helper.js
create mode 100644 node_modules/sequelize-cli/lib/helpers/view-helper.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/db.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/init.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/migration.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/model.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/seed.js
create mode 100644 node_modules/sequelize-cli/lib/tasks/version.js
create mode 100644 node_modules/sequelize-cli/node_modules/camelcase/index.js
create mode 100644 node_modules/sequelize-cli/node_modules/camelcase/license
create mode 100644 node_modules/sequelize-cli/node_modules/camelcase/package.json
create mode 100644 node_modules/sequelize-cli/node_modules/camelcase/readme.md
create mode 100644 node_modules/sequelize-cli/node_modules/cliui/CHANGELOG.md
create mode 100644 node_modules/sequelize-cli/node_modules/cliui/LICENSE.txt
create mode 100644 node_modules/sequelize-cli/node_modules/cliui/README.md
create mode 100644 node_modules/sequelize-cli/node_modules/cliui/index.js
create mode 100644 node_modules/sequelize-cli/node_modules/cliui/package.json
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/LICENSE
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/README.md
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_DataView.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Hash.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_LazyWrapper.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_ListCache.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_LodashWrapper.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Map.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_MapCache.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Promise.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Set.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_SetCache.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Stack.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Symbol.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_Uint8Array.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_WeakMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_addMapEntry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_addSetEntry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_apply.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayAggregator.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayEach.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayEachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayEvery.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayFilter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayIncludes.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayIncludesWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayLikeKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayPush.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayReduce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayReduceRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arraySample.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arraySampleSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arrayShuffle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_arraySome.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_asciiSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_asciiToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_asciiWords.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_assignMergeValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_assignValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_assocIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseAggregator.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseAssign.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseAssignIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseAssignValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseClamp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseClone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseConforms.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseConformsTo.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseCreate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseDelay.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseDifference.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseEach.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseEachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseEvery.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseExtremum.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFill.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFilter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFindIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFindKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFlatten.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseForOwn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseForOwnRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseForRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseFunctions.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseGet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseGetAllKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseGetTag.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseGt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseHasIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseInRange.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIndexOfWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIntersection.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseInverter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseInvoke.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsArguments.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsArrayBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsDate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsEqual.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsEqualDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsMatch.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsNaN.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsNative.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIsTypedArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseIteratee.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseKeysIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseLodash.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseLt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMatches.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMatchesProperty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMean.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMerge.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseMergeDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseNth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseOrderBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePick.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePickBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseProperty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePropertyDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePropertyOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePullAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_basePullAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseRandom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseRange.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseReduce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseRepeat.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseRest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSample.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSampleSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSetData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSetToString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseShuffle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSlice.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSome.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSortBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSortedIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSortedIndexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSortedUniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseSum.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseTimes.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseToNumber.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseToPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseToString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseUnary.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseUniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseUnset.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseUpdate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseValues.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseWrapperValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseXor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_baseZipObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cacheHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_castArrayLikeObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_castFunction.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_castPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_castRest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_castSlice.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_charsEndIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_charsStartIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneArrayBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneDataView.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneSymbol.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_cloneTypedArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_compareAscending.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_compareMultiple.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_composeArgs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_composeArgsRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_copyArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_copyObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_copySymbols.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_copySymbolsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_coreJsData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_countHolders.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createAggregator.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createAssigner.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createBaseEach.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createBaseFor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createBind.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createCaseFirst.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createCompounder.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createCtor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createCurry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createFind.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createFlow.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createHybrid.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createInverter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createMathOperation.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createOver.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createPadding.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createPartial.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createRange.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createRecurry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createRelationalOperation.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createRound.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createToPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_createWrap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_customDefaultsAssignIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_customDefaultsMerge.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_customOmitClone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_deburrLetter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_defineProperty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_equalArrays.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_equalByTag.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_equalObjects.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_escapeHtmlChar.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_escapeStringChar.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_flatRest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_freeGlobal.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getAllKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getAllKeysIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getFuncName.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getHolder.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getMapData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getMatchData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getNative.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getPrototype.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getRawTag.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getSymbols.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getSymbolsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getTag.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getView.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_getWrapDetails.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hasPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hasUnicode.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hasUnicodeWord.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hashClear.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hashDelete.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hashGet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hashHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_hashSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_initCloneArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_initCloneByTag.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_initCloneObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_insertWrapDetails.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isFlattenable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isIterateeCall.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isKeyable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isLaziable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isMaskable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isMasked.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isPrototype.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_isStrictComparable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_iteratorToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_lazyClone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_lazyReverse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_lazyValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_listCacheClear.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_listCacheDelete.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_listCacheGet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_listCacheHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_listCacheSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapCacheClear.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapCacheDelete.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapCacheGet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapCacheHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapCacheSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mapToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_matchesStrictComparable.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_memoizeCapped.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_mergeData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_metaMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_nativeCreate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_nativeKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_nativeKeysIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_nodeUtil.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_objectToString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_overArg.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_overRest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_parent.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_reEscape.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_reEvaluate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_reInterpolate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_realNames.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_reorder.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_replaceHolders.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_root.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setCacheAdd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setCacheHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setData.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setToPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setToString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_setWrapToString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_shortOut.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_shuffleSelf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stackClear.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stackDelete.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stackGet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stackHas.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stackSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_strictIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_strictLastIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stringSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stringToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_stringToPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_toKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_toSource.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_unescapeHtmlChar.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_unicodeSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_unicodeToArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_unicodeWords.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_updateWrapDetails.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/_wrapperClone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/add.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/after.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/array.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/ary.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/assign.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/assignIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/assignInWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/assignWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/at.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/attempt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/before.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/bind.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/bindAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/bindKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/camelCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/capitalize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/castArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/ceil.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/chain.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/chunk.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/clamp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/clone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/cloneDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/cloneDeepWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/cloneWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/collection.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/commit.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/compact.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/concat.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/cond.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/conforms.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/conformsTo.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/constant.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/core.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/core.min.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/countBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/create.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/curry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/curryRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/date.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/debounce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/deburr.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/defaultTo.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/defaults.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/defaultsDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/defer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/delay.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/difference.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/differenceBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/differenceWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/divide.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/drop.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/dropRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/dropRightWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/dropWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/each.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/eachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/endsWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/entries.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/entriesIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/eq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/escape.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/escapeRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/every.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/extend.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/extendWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fill.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/filter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/find.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/findIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/findKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/findLast.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/findLastIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/findLastKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/first.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flatMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flatMapDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flatMapDepth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flatten.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flattenDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flattenDepth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/floor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flow.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/flowRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forEach.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forEachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forInRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forOwn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/forOwnRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/F.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/T.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/__.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/_baseConvert.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/_convertBrowser.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/_falseOptions.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/_mapping.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/_util.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/add.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/after.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/all.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/allPass.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/always.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/any.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/anyPass.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/apply.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/array.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/ary.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assign.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignInAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignInAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignInWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assignWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assoc.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/assocPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/at.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/attempt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/before.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/bind.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/bindAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/bindKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/camelCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/capitalize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/castArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/ceil.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/chain.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/chunk.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/clamp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/clone.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/cloneDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/cloneDeepWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/cloneWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/collection.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/commit.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/compact.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/complement.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/compose.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/concat.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/cond.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/conforms.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/conformsTo.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/constant.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/contains.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/convert.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/countBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/create.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/curry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/curryN.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/curryRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/curryRightN.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/date.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/debounce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/deburr.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defaultTo.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defaults.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defaultsAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defaultsDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defaultsDeepAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/defer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/delay.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/difference.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/differenceBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/differenceWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dissoc.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dissocPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/divide.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/drop.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dropLast.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dropLastWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dropRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dropRightWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/dropWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/each.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/eachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/endsWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/entries.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/entriesIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/eq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/equals.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/escape.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/escapeRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/every.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/extend.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/extendAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/extendAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/extendWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/fill.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/filter.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/find.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findIndexFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findLast.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findLastFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findLastIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findLastIndexFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/findLastKey.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/first.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flatMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flatMapDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flatMapDepth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flatten.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flattenDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flattenDepth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/floor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flow.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/flowRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forEach.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forEachRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forInRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forOwn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/forOwnRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/fromPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/function.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/functions.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/functionsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/get.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/getOr.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/groupBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/gt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/gte.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/has.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/hasIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/head.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/identical.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/identity.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/inRange.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/includes.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/includesFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/indexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/indexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/indexOfFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/init.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/initial.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/intersection.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/intersectionBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/intersectionWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invert.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invertBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invertObj.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invoke.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invokeArgs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invokeArgsMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/invokeMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isArguments.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isArrayBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isArrayLike.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isArrayLikeObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isBoolean.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isDate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isElement.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isEmpty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isEqual.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isEqualWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isError.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isFinite.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isFunction.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isLength.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isMatch.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isMatchWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isNaN.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isNative.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isNil.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isNull.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isNumber.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isObjectLike.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isPlainObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isSafeInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isSymbol.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isTypedArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isUndefined.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isWeakMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/isWeakSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/iteratee.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/join.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/juxt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/kebabCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/keyBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/keys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/keysIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lang.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/last.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lastIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lastIndexOfFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lowerCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lowerFirst.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/lte.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/map.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mapKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mapValues.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/matches.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/matchesProperty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/math.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/max.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/maxBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mean.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/meanBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/memoize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/merge.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mergeAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mergeAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mergeWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/method.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/methodOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/min.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/minBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/mixin.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/multiply.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/nAry.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/negate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/next.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/noop.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/now.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/nth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/nthArg.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/number.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/object.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/omit.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/omitAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/omitBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/once.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/orderBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/over.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/overArgs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/overEvery.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/overSome.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pad.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/padChars.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/padCharsEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/padCharsStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/padEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/padStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/parseInt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/partial.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/partialRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/partition.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/path.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pathEq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pathOr.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/paths.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pick.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pickAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pickBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pipe.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/placeholder.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/plant.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pluck.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/prop.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/propEq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/propOr.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/property.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/propertyOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/props.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pull.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pullAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pullAllBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pullAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/pullAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/random.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/range.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/rangeRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/rangeStep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/rangeStepRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/rearg.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/reduce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/reduceRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/reject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/remove.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/repeat.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/replace.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/rest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/restFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/result.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/reverse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/round.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sample.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sampleSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/seq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/set.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/setWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/shuffle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/size.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/slice.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/snakeCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/some.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedIndexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedLastIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedLastIndexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedLastIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedUniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sortedUniqBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/split.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/spread.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/spreadFrom.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/startCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/startsWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/string.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/stubArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/stubFalse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/stubObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/stubString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/stubTrue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/subtract.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sum.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/sumBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/symmetricDifference.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/symmetricDifferenceBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/symmetricDifferenceWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/tail.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/take.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/takeLast.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/takeLastWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/takeRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/takeRightWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/takeWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/tap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/template.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/templateSettings.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/throttle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/thru.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/times.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toFinite.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toIterator.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toJSON.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toLength.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toLower.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toNumber.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toPairsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toPlainObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toSafeInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/toUpper.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/transform.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trim.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trimChars.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trimCharsEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trimCharsStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trimEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/trimStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/truncate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unapply.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unary.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unescape.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/union.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unionBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unionWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/uniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/uniqBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/uniqWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/uniqueId.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unnest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unset.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unzip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/unzipWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/update.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/updateWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/upperCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/upperFirst.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/useWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/util.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/value.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/valueOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/values.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/valuesIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/where.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/whereEq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/without.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/words.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrapperAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrapperChain.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrapperLodash.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrapperReverse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/wrapperValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/xor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/xorBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/xorWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zipAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zipObj.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zipObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zipObjectDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fp/zipWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/fromPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/function.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/functions.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/functionsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/get.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/groupBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/gt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/gte.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/has.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/hasIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/head.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/identity.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/inRange.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/includes.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/index.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/indexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/initial.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/intersection.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/intersectionBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/intersectionWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/invert.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/invertBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/invoke.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/invokeMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isArguments.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isArrayBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isArrayLike.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isArrayLikeObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isBoolean.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isBuffer.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isDate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isElement.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isEmpty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isEqual.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isEqualWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isError.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isFinite.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isFunction.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isLength.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isMatch.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isMatchWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isNaN.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isNative.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isNil.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isNull.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isNumber.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isObjectLike.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isPlainObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isRegExp.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isSafeInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isSymbol.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isTypedArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isUndefined.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isWeakMap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/isWeakSet.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/iteratee.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/join.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/kebabCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/keyBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/keys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/keysIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lang.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/last.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lastIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lodash.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lodash.min.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lowerCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lowerFirst.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/lte.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/map.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/mapKeys.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/mapValues.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/matches.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/matchesProperty.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/math.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/max.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/maxBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/mean.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/meanBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/memoize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/merge.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/mergeWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/method.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/methodOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/min.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/minBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/mixin.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/multiply.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/negate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/next.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/noop.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/now.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/nth.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/nthArg.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/number.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/object.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/omit.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/omitBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/once.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/orderBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/over.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/overArgs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/overEvery.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/overSome.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/package.json
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pad.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/padEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/padStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/parseInt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/partial.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/partialRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/partition.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pick.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pickBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/plant.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/property.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/propertyOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pull.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pullAll.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pullAllBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pullAllWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/pullAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/random.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/range.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/rangeRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/rearg.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/reduce.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/reduceRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/reject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/remove.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/repeat.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/replace.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/rest.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/result.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/reverse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/round.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sample.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sampleSize.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/seq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/set.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/setWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/shuffle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/size.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/slice.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/snakeCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/some.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedIndexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedLastIndex.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedLastIndexBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedLastIndexOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedUniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sortedUniqBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/split.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/spread.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/startCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/startsWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/string.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/stubArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/stubFalse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/stubObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/stubString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/stubTrue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/subtract.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sum.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/sumBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/tail.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/take.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/takeRight.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/takeRightWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/takeWhile.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/tap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/template.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/templateSettings.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/throttle.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/thru.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/times.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toArray.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toFinite.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toIterator.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toJSON.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toLength.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toLower.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toNumber.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toPairs.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toPairsIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toPath.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toPlainObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toSafeInteger.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toString.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/toUpper.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/transform.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/trim.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/trimEnd.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/trimStart.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/truncate.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unary.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unescape.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/union.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unionBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unionWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/uniq.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/uniqBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/uniqWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/uniqueId.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unset.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unzip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/unzipWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/update.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/updateWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/upperCase.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/upperFirst.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/util.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/value.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/valueOf.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/values.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/valuesIn.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/without.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/words.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrap.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrapperAt.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrapperChain.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrapperLodash.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrapperReverse.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/wrapperValue.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/xor.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/xorBy.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/xorWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/zip.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/zipObject.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/zipObjectDeep.js
create mode 100644 node_modules/sequelize-cli/node_modules/lodash/zipWith.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/CHANGELOG.md
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/LICENSE
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/README.md
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/completion.sh.hbs
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/index.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/apply-extends.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/argsert.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/assign.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/command.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/completion.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/levenshtein.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/obj-filter.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/usage.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/validation.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/lib/yerror.js
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/be.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/de.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/en.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/es.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/fr.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/hi.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/hu.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/id.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/it.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/ja.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/ko.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/nb.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/nl.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/pirate.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/pl.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/pt.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/pt_BR.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/ru.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/th.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/tr.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/zh_CN.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/locales/zh_TW.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/package.json
create mode 100644 node_modules/sequelize-cli/node_modules/yargs/yargs.js
create mode 100644 node_modules/sequelize-cli/package.json
create mode 100644 node_modules/sequelize-cli/test/.jshintrc
create mode 100644 node_modules/sequelize-cli/test/db/migrate-json.test.js
create mode 100644 node_modules/sequelize-cli/test/db/migrate.test.js
create mode 100644 node_modules/sequelize-cli/test/db/migrate/old_schema.test.js
create mode 100644 node_modules/sequelize-cli/test/db/migrate/status.test.js
create mode 100644 node_modules/sequelize-cli/test/db/migrate/undo.test.js
create mode 100644 node_modules/sequelize-cli/test/db/migrate/undo/all.test.js
create mode 100644 node_modules/sequelize-cli/test/db/seed-json.test.js
create mode 100644 node_modules/sequelize-cli/test/db/seed.test.js
create mode 100644 node_modules/sequelize-cli/test/db/seed/all.test.js
create mode 100644 node_modules/sequelize-cli/test/db/seed/undo.test.js
create mode 100644 node_modules/sequelize-cli/test/db/seed/undo/all.test.js
create mode 100644 node_modules/sequelize-cli/test/environment-variable.test.js
create mode 100644 node_modules/sequelize-cli/test/help.test.js
create mode 100644 node_modules/sequelize-cli/test/init.test.js
create mode 100644 node_modules/sequelize-cli/test/migration/create.test.js
create mode 100644 node_modules/sequelize-cli/test/model/create.test.js
create mode 100644 node_modules/sequelize-cli/test/options.test.js
create mode 100644 node_modules/sequelize-cli/test/seed/create.test.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111117063700-createPerson.coffee
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111117063700-createPerson.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111130161100-emptyMigration.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111205064000-renamePersonToUser.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111205162700-addSignatureColumnToUser.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111205167000-addUniqueNameColumnToUser.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111206061400-removeShopIdColumnFromUser.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111206063000-changeSignatureColumnOfUserToMendatory.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20111206163300-renameSignatureColumnOfUserToSig.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909174103-createFunctionGetAnAnswer.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909174253-renameFunctionGetAnAnswerGetTheAnswer.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909175000-deleteFunctionGetTheAnswer.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909175939-createTestTableForTrigger.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909180846-createTriggerOnTriggerTestTable.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909181148-renameTriggerUpdatedAtToUpdateUpdatedAt.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/20130909185621-deleteTriggerUpdateUpdatedAt.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/invalid/20141208213500-createPerson.coffee
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/invalid/20141208213500-createPerson.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/new/20141208213500-createPerson.coffee
create mode 100644 node_modules/sequelize-cli/test/support/assets/migrations/new/20141208213500-createPerson.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/project.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/20111117063700-seedPerson.coffee
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/20111117063700-seedPerson.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/20111117063900-seedPerson2.js
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/new/20141208213500-seedPerson.coffee
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/new/20141208213500-seedPerson.coffee~
create mode 100644 node_modules/sequelize-cli/test/support/assets/seeders/new/20141208213500-seedPerson.js
create mode 100644 node_modules/sequelize-cli/test/support/config/config.js
create mode 100644 node_modules/sequelize-cli/test/support/config/options.js
create mode 100644 node_modules/sequelize-cli/test/support/helpers.js
create mode 100644 node_modules/sequelize-cli/test/support/index.js
create mode 100644 node_modules/sequelize-cli/test/url.test.js
create mode 100644 node_modules/sequelize-cli/test/version.test.js
create mode 100644 node_modules/sequelize-cli/var/vagrant/README.md
create mode 100644 node_modules/sequelize-cli/var/vagrant/Vagrantfile
create mode 100644 node_modules/sequelize-cli/var/vagrant/provision.sh
create mode 100644 node_modules/sequelize/.dockerignore
create mode 100644 node_modules/sequelize/.editorconfig
create mode 100644 node_modules/sequelize/.github/ISSUE_TEMPLATE.md
create mode 100644 node_modules/sequelize/.github/PULL_REQUEST_TEMPLATE.md
create mode 100644 node_modules/sequelize/.gitmodules
create mode 100644 node_modules/sequelize/.idea/dictionaries/jan.xml
create mode 100644 node_modules/sequelize/.idea/encodings.xml
create mode 100644 node_modules/sequelize/.idea/inspectionProfiles/Project_Default.xml
create mode 100644 node_modules/sequelize/.idea/inspectionProfiles/profiles_settings.xml
create mode 100644 node_modules/sequelize/.idea/jsLibraryMappings.xml
create mode 100644 node_modules/sequelize/.idea/jsLinters/jshint.xml
create mode 100644 node_modules/sequelize/.idea/misc.xml
create mode 100644 node_modules/sequelize/.idea/modules.xml
create mode 100644 node_modules/sequelize/.idea/sequelize.iml
create mode 100644 node_modules/sequelize/.idea/vcs.xml
create mode 100644 node_modules/sequelize/.idea/watcherTasks.xml
create mode 100644 node_modules/sequelize/.idea/workspace.xml
create mode 100644 node_modules/sequelize/.jshintrc
create mode 100644 node_modules/sequelize/.npmignore
create mode 100644 node_modules/sequelize/.travis.yml
create mode 100644 node_modules/sequelize/CONTRIBUTING.DOCS.md
create mode 100644 node_modules/sequelize/CONTRIBUTING.md
create mode 100644 node_modules/sequelize/Dockerfile
create mode 100644 node_modules/sequelize/LICENSE
create mode 100644 node_modules/sequelize/README.md
create mode 100644 node_modules/sequelize/appveyor-setup.ps1
create mode 100644 node_modules/sequelize/appveyor.yml
create mode 100644 node_modules/sequelize/changelog.md
create mode 100644 node_modules/sequelize/codecov.yml
create mode 100644 node_modules/sequelize/docker-compose.yml
create mode 100644 node_modules/sequelize/index.js
create mode 100644 node_modules/sequelize/lib/associations/base.js
create mode 100644 node_modules/sequelize/lib/associations/belongs-to-many.js
create mode 100644 node_modules/sequelize/lib/associations/belongs-to.js
create mode 100644 node_modules/sequelize/lib/associations/has-many.js
create mode 100644 node_modules/sequelize/lib/associations/has-one.js
create mode 100644 node_modules/sequelize/lib/associations/helpers.js
create mode 100644 node_modules/sequelize/lib/associations/index.js
create mode 100644 node_modules/sequelize/lib/associations/mixin.js
create mode 100644 node_modules/sequelize/lib/data-types.js
create mode 100644 node_modules/sequelize/lib/deferrable.js
create mode 100644 node_modules/sequelize/lib/dialects/abstract/connection-manager.js
create mode 100644 node_modules/sequelize/lib/dialects/abstract/index.js
create mode 100644 node_modules/sequelize/lib/dialects/abstract/query-generator.js
create mode 100755 node_modules/sequelize/lib/dialects/abstract/query.js
create mode 100644 node_modules/sequelize/lib/dialects/mariadb/index.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/connection-manager.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/data-types.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/index.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/query-generator.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/query-interface.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/query.js
create mode 100644 node_modules/sequelize/lib/dialects/mssql/resource-lock.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/connection-manager.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/data-types.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/index.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/query-generator.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/query-interface.js
create mode 100644 node_modules/sequelize/lib/dialects/mysql/query.js
create mode 100644 node_modules/sequelize/lib/dialects/parserStore.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/connection-manager.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/data-types.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/hstore.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/index.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/query-generator.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/query.js
create mode 100644 node_modules/sequelize/lib/dialects/postgres/range.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/connection-manager.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/data-types.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/index.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/query-generator.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/query-interface.js
create mode 100644 node_modules/sequelize/lib/dialects/sqlite/query.js
create mode 100644 node_modules/sequelize/lib/errors.js
create mode 100644 node_modules/sequelize/lib/hooks.js
create mode 100644 node_modules/sequelize/lib/instance-validator.js
create mode 100644 node_modules/sequelize/lib/instance.js
create mode 100644 node_modules/sequelize/lib/model-manager.js
create mode 100644 node_modules/sequelize/lib/model.js
create mode 100644 node_modules/sequelize/lib/model/attribute.js
create mode 100644 node_modules/sequelize/lib/plugins/counter-cache.js
create mode 100644 node_modules/sequelize/lib/promise.js
create mode 100644 node_modules/sequelize/lib/query-interface.js
create mode 100644 node_modules/sequelize/lib/query-types.js
create mode 100755 node_modules/sequelize/lib/sequelize.js
create mode 100644 node_modules/sequelize/lib/sql-string.js
create mode 100644 node_modules/sequelize/lib/transaction.js
create mode 100644 node_modules/sequelize/lib/utils.js
create mode 100644 node_modules/sequelize/lib/utils/parameter-validator.js
create mode 100644 node_modules/sequelize/lib/utils/validator-extras.js
create mode 100644 node_modules/sequelize/mkdocs.yml
create mode 120000 node_modules/sequelize/node_modules/.bin/semver
create mode 100644 node_modules/sequelize/node_modules/generic-pool/.eslintrc.js
create mode 100644 node_modules/sequelize/node_modules/generic-pool/.npmignore
create mode 100644 node_modules/sequelize/node_modules/generic-pool/.travis.yml
create mode 100644 node_modules/sequelize/node_modules/generic-pool/CHANGELOG.md
create mode 100644 node_modules/sequelize/node_modules/generic-pool/Makefile
create mode 100644 node_modules/sequelize/node_modules/generic-pool/README.md
create mode 100644 node_modules/sequelize/node_modules/generic-pool/bugs/128.js
create mode 100644 node_modules/sequelize/node_modules/generic-pool/fabfile.py
create mode 100644 node_modules/sequelize/node_modules/generic-pool/lib/generic-pool.js
create mode 100644 node_modules/sequelize/node_modules/generic-pool/package.json
create mode 100644 node_modules/sequelize/node_modules/generic-pool/test/generic-pool.test.js
create mode 100644 node_modules/sequelize/node_modules/semver/LICENSE
create mode 100644 node_modules/sequelize/node_modules/semver/README.md
create mode 100755 node_modules/sequelize/node_modules/semver/bin/semver
create mode 100644 node_modules/sequelize/node_modules/semver/package.json
create mode 100644 node_modules/sequelize/node_modules/semver/range.bnf
create mode 100644 node_modules/sequelize/node_modules/semver/semver.js
create mode 100644 node_modules/sequelize/package.json
create mode 100644 node_modules/sequelize/sscce_template.js
create mode 100644 node_modules/sequelize/test-app.js
create mode 100644 node_modules/sequencify/.npmignore
create mode 100644 node_modules/sequencify/.travis.yml
create mode 100644 node_modules/sequencify/LICENSE
create mode 100644 node_modules/sequencify/README.md
create mode 100644 node_modules/sequencify/index.js
create mode 100644 node_modules/sequencify/package.json
create mode 100644 node_modules/serve-favicon/HISTORY.md
create mode 100644 node_modules/serve-favicon/LICENSE
create mode 100644 node_modules/serve-favicon/README.md
create mode 100644 node_modules/serve-favicon/index.js
create mode 100644 node_modules/serve-favicon/package.json
create mode 100644 node_modules/serve-static/HISTORY.md
create mode 100644 node_modules/serve-static/LICENSE
create mode 100644 node_modules/serve-static/README.md
create mode 100644 node_modules/serve-static/index.js
create mode 100644 node_modules/serve-static/package.json
create mode 100644 node_modules/set-blocking/CHANGELOG.md
create mode 100644 node_modules/set-blocking/LICENSE.txt
create mode 100644 node_modules/set-blocking/README.md
create mode 100644 node_modules/set-blocking/index.js
create mode 100644 node_modules/set-blocking/package.json
create mode 100644 node_modules/setprototypeof/LICENSE
create mode 100644 node_modules/setprototypeof/README.md
create mode 100644 node_modules/setprototypeof/index.js
create mode 100644 node_modules/setprototypeof/package.json
create mode 100644 node_modules/shebang-command/index.js
create mode 100644 node_modules/shebang-command/license
create mode 100644 node_modules/shebang-command/package.json
create mode 100644 node_modules/shebang-command/readme.md
create mode 100644 node_modules/shebang-regex/index.js
create mode 100644 node_modules/shebang-regex/license
create mode 100644 node_modules/shebang-regex/package.json
create mode 100644 node_modules/shebang-regex/readme.md
create mode 100644 node_modules/shimmer/.npmignore
create mode 100644 node_modules/shimmer/.travis.yml
create mode 100644 node_modules/shimmer/README.md
create mode 100644 node_modules/shimmer/index.js
create mode 100644 node_modules/shimmer/package.json
create mode 100644 node_modules/shimmer/test/init.tap.js
create mode 100644 node_modules/shimmer/test/massWrap.tap.js
create mode 100644 node_modules/shimmer/test/unwrap.tap.js
create mode 100644 node_modules/shimmer/test/wrap.tap.js
create mode 100644 node_modules/sigmund/LICENSE
create mode 100644 node_modules/sigmund/README.md
create mode 100644 node_modules/sigmund/bench.js
create mode 100644 node_modules/sigmund/package.json
create mode 100644 node_modules/sigmund/sigmund.js
create mode 100644 node_modules/sigmund/test/basic.js
create mode 100644 node_modules/source-map/README.md
create mode 100644 node_modules/source-map/build/assert-shim.js
create mode 100644 node_modules/source-map/build/mini-require.js
create mode 100644 node_modules/source-map/build/prefix-source-map.jsm
create mode 100644 node_modules/source-map/build/prefix-utils.jsm
create mode 100644 node_modules/source-map/build/suffix-browser.js
create mode 100644 node_modules/source-map/build/suffix-source-map.jsm
create mode 100644 node_modules/source-map/build/suffix-utils.jsm
create mode 100644 node_modules/source-map/build/test-prefix.js
create mode 100644 node_modules/source-map/build/test-suffix.js
create mode 100644 node_modules/source-map/lib/source-map.js
create mode 100644 node_modules/source-map/lib/source-map/array-set.js
create mode 100644 node_modules/source-map/lib/source-map/base64-vlq.js
create mode 100644 node_modules/source-map/lib/source-map/base64.js
create mode 100644 node_modules/source-map/lib/source-map/binary-search.js
create mode 100644 node_modules/source-map/lib/source-map/mapping-list.js
create mode 100644 node_modules/source-map/lib/source-map/quick-sort.js
create mode 100644 node_modules/source-map/lib/source-map/source-map-consumer.js
create mode 100644 node_modules/source-map/lib/source-map/source-map-generator.js
create mode 100644 node_modules/source-map/lib/source-map/source-node.js
create mode 100644 node_modules/source-map/lib/source-map/util.js
create mode 100644 node_modules/source-map/package.json
create mode 100644 node_modules/sparkles/LICENSE
create mode 100644 node_modules/sparkles/README.md
create mode 100644 node_modules/sparkles/index.js
create mode 100644 node_modules/sparkles/package.json
create mode 100644 node_modules/spdx-correct/LICENSE
create mode 100644 node_modules/spdx-correct/README.md
create mode 100644 node_modules/spdx-correct/index.js
create mode 100644 node_modules/spdx-correct/package.json
create mode 100644 node_modules/spdx-expression-parse/AUTHORS
create mode 100644 node_modules/spdx-expression-parse/LICENSE
create mode 100644 node_modules/spdx-expression-parse/README.md
create mode 100644 node_modules/spdx-expression-parse/index.js
create mode 100644 node_modules/spdx-expression-parse/package.json
create mode 100644 node_modules/spdx-expression-parse/parser.js
create mode 100644 node_modules/spdx-license-ids/LICENSE
create mode 100755 node_modules/spdx-license-ids/README.md
create mode 100644 node_modules/spdx-license-ids/package.json
create mode 100644 node_modules/spdx-license-ids/spdx-license-ids.json
create mode 100644 node_modules/split/.npmignore
create mode 100644 node_modules/split/.travis.yml
create mode 100644 node_modules/split/LICENCE
create mode 100644 node_modules/split/examples/pretty.js
create mode 100644 node_modules/split/index.js
create mode 100644 node_modules/split/package.json
create mode 100644 node_modules/split/readme.markdown
create mode 100644 node_modules/split/test/options.asynct.js
create mode 100644 node_modules/split/test/partitioned_unicode.js
create mode 100644 node_modules/split/test/split.asynct.js
create mode 100644 node_modules/split/test/try_catch.asynct.js
create mode 100644 node_modules/statuses/HISTORY.md
create mode 100644 node_modules/statuses/LICENSE
create mode 100644 node_modules/statuses/README.md
create mode 100644 node_modules/statuses/codes.json
create mode 100644 node_modules/statuses/index.js
create mode 100644 node_modules/statuses/package.json
create mode 100644 node_modules/stream-consume/.npmignore
create mode 100644 node_modules/stream-consume/README.md
create mode 100644 node_modules/stream-consume/index.js
create mode 100644 node_modules/stream-consume/package.json
create mode 100644 node_modules/stream-consume/test/tests.js
create mode 100644 node_modules/string-width/index.js
create mode 100644 node_modules/string-width/license
create mode 100644 node_modules/string-width/package.json
create mode 100644 node_modules/string-width/readme.md
create mode 100644 node_modules/string_decoder/.npmignore
create mode 100644 node_modules/string_decoder/LICENSE
create mode 100644 node_modules/string_decoder/README.md
create mode 100644 node_modules/string_decoder/index.js
create mode 100644 node_modules/string_decoder/package.json
create mode 100644 node_modules/strip-ansi/index.js
create mode 100644 node_modules/strip-ansi/license
create mode 100644 node_modules/strip-ansi/package.json
create mode 100644 node_modules/strip-ansi/readme.md
create mode 100755 node_modules/strip-bom/cli.js
create mode 100644 node_modules/strip-bom/index.js
create mode 100644 node_modules/strip-bom/package.json
create mode 100644 node_modules/strip-bom/readme.md
create mode 100644 node_modules/supports-color/index.js
create mode 100644 node_modules/supports-color/license
create mode 100644 node_modules/supports-color/package.json
create mode 100644 node_modules/supports-color/readme.md
create mode 100644 node_modules/terraformer-wkt-parser/.npmignore
create mode 100644 node_modules/terraformer-wkt-parser/.travis.yml
create mode 100644 node_modules/terraformer-wkt-parser/AUTHORS
create mode 100644 node_modules/terraformer-wkt-parser/CHANGELOG.md
create mode 100644 node_modules/terraformer-wkt-parser/Gruntfile.js
create mode 100644 node_modules/terraformer-wkt-parser/LICENSE
create mode 100644 node_modules/terraformer-wkt-parser/README.md
create mode 100644 node_modules/terraformer-wkt-parser/bower.json
create mode 100644 node_modules/terraformer-wkt-parser/coverage/__root__/index.html
create mode 100644 node_modules/terraformer-wkt-parser/coverage/__root__/terraformer-wkt-parser.js.html
create mode 100644 node_modules/terraformer-wkt-parser/coverage/base.css
create mode 100644 node_modules/terraformer-wkt-parser/coverage/coverage.json
create mode 100644 node_modules/terraformer-wkt-parser/coverage/dist/index.html
create mode 100644 node_modules/terraformer-wkt-parser/coverage/dist/terraformer-wkt-parser.js.html
create mode 100644 node_modules/terraformer-wkt-parser/coverage/index.html
create mode 100644 node_modules/terraformer-wkt-parser/coverage/prettify.css
create mode 100644 node_modules/terraformer-wkt-parser/coverage/prettify.js
create mode 100644 node_modules/terraformer-wkt-parser/coverage/sort-arrow-sprite.png
create mode 100644 node_modules/terraformer-wkt-parser/coverage/sorter.js
create mode 100644 node_modules/terraformer-wkt-parser/dist/terraformer-wkt-parser.js
create mode 100644 node_modules/terraformer-wkt-parser/dist/terraformer-wkt-parser.min.js
create mode 100644 node_modules/terraformer-wkt-parser/examples/feature_collection.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/linestring.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/linestring.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/multi_linestring.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/multi_linestring.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/multi_polygon.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/multi_polygon.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/multi_polygon_with_hole.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/multipoint.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/multipoint.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/multipoint_alternate.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/point.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/point.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/polygon.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/polygon.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/polygon_with_dots.wkt
create mode 100644 node_modules/terraformer-wkt-parser/examples/polygon_with_hole.json
create mode 100644 node_modules/terraformer-wkt-parser/examples/polygon_with_hole.wkt
create mode 100644 node_modules/terraformer-wkt-parser/package.json
create mode 100644 node_modules/terraformer-wkt-parser/spec/wktSpec.js
create mode 100644 node_modules/terraformer-wkt-parser/src/module-source.js
create mode 100644 node_modules/terraformer-wkt-parser/src/wkt.yy
create mode 100644 node_modules/terraformer-wkt-parser/terraformer-wkt-parser.d.ts
create mode 100644 node_modules/terraformer-wkt-parser/terraformer-wkt-parser.js
create mode 100644 node_modules/terraformer-wkt-parser/terraformer-wkt-parser.min.js
create mode 100644 node_modules/terraformer-wkt-parser/test.js
create mode 100644 node_modules/terraformer-wkt-parser/test.ts
create mode 100644 node_modules/terraformer-wkt-parser/test/convert-test.js
create mode 100644 node_modules/terraformer-wkt-parser/test/terraformer-parse-test.js
create mode 100644 node_modules/terraformer-wkt-parser/test/wkt-parse-test.js
create mode 100644 node_modules/terraformer-wkt-parser/tsconfig.json
create mode 100644 node_modules/terraformer-wkt-parser/typings.json
create mode 100644 node_modules/terraformer-wkt-parser/typings/globals/geojson/index.d.ts
create mode 100644 node_modules/terraformer-wkt-parser/typings/globals/geojson/typings.json
create mode 100644 node_modules/terraformer-wkt-parser/typings/index.d.ts
create mode 100644 node_modules/terraformer/.coverage/__root__/index.html
create mode 100644 node_modules/terraformer/.coverage/__root__/terraformer.js.html
create mode 100644 node_modules/terraformer/.coverage/base.css
create mode 100644 node_modules/terraformer/.coverage/coverage.json
create mode 100644 node_modules/terraformer/.coverage/index.html
create mode 100644 node_modules/terraformer/.coverage/prettify.css
create mode 100644 node_modules/terraformer/.coverage/prettify.js
create mode 100644 node_modules/terraformer/.coverage/sort-arrow-sprite.png
create mode 100644 node_modules/terraformer/.coverage/sorter.js
create mode 100644 node_modules/terraformer/.npmignore
create mode 100755 node_modules/terraformer/.travis.yml
create mode 100644 node_modules/terraformer/CHANGELOG.md
create mode 100644 node_modules/terraformer/Gemfile
create mode 100644 node_modules/terraformer/Gemfile.lock
create mode 100755 node_modules/terraformer/LICENSE
create mode 100755 node_modules/terraformer/README.md
create mode 100644 node_modules/terraformer/bower.json
create mode 100644 node_modules/terraformer/docs-build/CNAME
create mode 100644 node_modules/terraformer/docs-build/arcgis-parser/index.html
create mode 100644 node_modules/terraformer/docs-build/assets/css/terraformer-02847305.css
create mode 100644 node_modules/terraformer/docs-build/assets/fonts/esri-logo-3a94862e.svg
create mode 100644 node_modules/terraformer/docs-build/assets/fonts/esri-logo-71163913.ttf
create mode 100644 node_modules/terraformer/docs-build/assets/fonts/esri-logo-80bed756.woff
create mode 100644 node_modules/terraformer/docs-build/assets/fonts/esri-logo-fc93d7bf.eot
create mode 100644 node_modules/terraformer/docs-build/assets/fonts/esri-logo.dev-aed9f839.svg
create mode 100644 node_modules/terraformer/docs-build/assets/images/terraformer-arcparser-a0228324.png
create mode 100644 node_modules/terraformer/docs-build/assets/images/terraformer-core-93b83c36.png
create mode 100644 node_modules/terraformer/docs-build/assets/images/terraformer-geostore-9e09ce2c.png
create mode 100644 node_modules/terraformer/docs-build/assets/images/terraformer-parser-a57c9c2d.png
create mode 100644 node_modules/terraformer/docs-build/assets/images/terraformer-wktparser-b18bc9d9.png
create mode 100644 node_modules/terraformer/docs-build/assets/javascripts/all-da39a3ee.js
create mode 100644 node_modules/terraformer/docs-build/assets/javascripts/classie-b6db1f70.js
create mode 100644 node_modules/terraformer/docs-build/assets/javascripts/drawer-3a1490eb.js
create mode 100644 node_modules/terraformer/docs-build/assets/javascripts/modernizr.custom-cadc78a2.js
create mode 100644 node_modules/terraformer/docs-build/core/index.html
create mode 100644 node_modules/terraformer/docs-build/favicon.ico
create mode 100644 node_modules/terraformer/docs-build/geostore/alternate-indexes/index.html
create mode 100644 node_modules/terraformer/docs-build/geostore/core-concepts/index.html
create mode 100644 node_modules/terraformer/docs-build/geostore/data-stores/index.html
create mode 100644 node_modules/terraformer/docs-build/geostore/index.html
create mode 100644 node_modules/terraformer/docs-build/geostore/spatial-indexes/index.html
create mode 100644 node_modules/terraformer/docs-build/getting-started/index.html
create mode 100644 node_modules/terraformer/docs-build/glossary/index.html
create mode 100644 node_modules/terraformer/docs-build/index.html
create mode 100644 node_modules/terraformer/docs-build/install/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/cover/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/doctoc/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/footer/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/index_partials/arcgis_parser/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/index_partials/geostore/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/index_partials/terraformer_core/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/index_partials/wkt_parser/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/nav/index.html
create mode 100644 node_modules/terraformer/docs-build/partials/subnav/index.html
create mode 100644 node_modules/terraformer/docs-build/wkt-parser/index.html
create mode 100755 node_modules/terraformer/gruntfile.js
create mode 100644 node_modules/terraformer/package.json
create mode 100755 node_modules/terraformer/release.sh
create mode 100755 node_modules/terraformer/spec/geojsonHelpers.js
create mode 100755 node_modules/terraformer/spec/spatialReferenceSpec.js
create mode 100755 node_modules/terraformer/spec/terraformerSpec.js
create mode 100644 node_modules/terraformer/terraformer-1.0.8.min.js
create mode 100644 node_modules/terraformer/terraformer.d.ts
create mode 100755 node_modules/terraformer/terraformer.js
create mode 100644 node_modules/terraformer/test.js
create mode 100644 node_modules/terraformer/test.ts
create mode 100644 node_modules/terraformer/tsconfig.json
create mode 100644 node_modules/terraformer/tslint.json
create mode 100644 node_modules/through/.travis.yml
create mode 100644 node_modules/through/LICENSE.APACHE2
create mode 100644 node_modules/through/LICENSE.MIT
create mode 100644 node_modules/through/index.js
create mode 100644 node_modules/through/package.json
create mode 100644 node_modules/through/readme.markdown
create mode 100644 node_modules/through/test/async.js
create mode 100644 node_modules/through/test/auto-destroy.js
create mode 100644 node_modules/through/test/buffering.js
create mode 100644 node_modules/through/test/end.js
create mode 100644 node_modules/through/test/index.js
create mode 100644 node_modules/through2/.npmignore
create mode 100644 node_modules/through2/LICENSE.html
create mode 100644 node_modules/through2/LICENSE.md
create mode 100644 node_modules/through2/README.md
create mode 100644 node_modules/through2/node_modules/readable-stream/.npmignore
create mode 100644 node_modules/through2/node_modules/readable-stream/.travis.yml
create mode 100644 node_modules/through2/node_modules/readable-stream/CONTRIBUTING.md
create mode 100644 node_modules/through2/node_modules/readable-stream/GOVERNANCE.md
create mode 100644 node_modules/through2/node_modules/readable-stream/LICENSE
create mode 100644 node_modules/through2/node_modules/readable-stream/README.md
create mode 100644 node_modules/through2/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md
create mode 100644 node_modules/through2/node_modules/readable-stream/duplex-browser.js
create mode 100644 node_modules/through2/node_modules/readable-stream/duplex.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/internal/streams/BufferList.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/internal/streams/stream-browser.js
create mode 100644 node_modules/through2/node_modules/readable-stream/lib/internal/streams/stream.js
create mode 100644 node_modules/through2/node_modules/readable-stream/package.json
create mode 100644 node_modules/through2/node_modules/readable-stream/passthrough.js
create mode 100644 node_modules/through2/node_modules/readable-stream/readable-browser.js
create mode 100644 node_modules/through2/node_modules/readable-stream/readable.js
create mode 100644 node_modules/through2/node_modules/readable-stream/transform.js
create mode 100644 node_modules/through2/node_modules/readable-stream/writable-browser.js
create mode 100644 node_modules/through2/node_modules/readable-stream/writable.js
create mode 100644 node_modules/through2/node_modules/string_decoder/.npmignore
create mode 100644 node_modules/through2/node_modules/string_decoder/LICENSE
create mode 100644 node_modules/through2/node_modules/string_decoder/README.md
create mode 100644 node_modules/through2/node_modules/string_decoder/lib/string_decoder.js
create mode 100644 node_modules/through2/node_modules/string_decoder/package.json
create mode 100644 node_modules/through2/package.json
create mode 100644 node_modules/through2/through2.js
create mode 100644 node_modules/tildify/index.js
create mode 100644 node_modules/tildify/license
create mode 100644 node_modules/tildify/package.json
create mode 100644 node_modules/tildify/readme.md
create mode 100644 node_modules/time-stamp/LICENSE
create mode 100644 node_modules/time-stamp/README.md
create mode 100644 node_modules/time-stamp/index.js
create mode 100644 node_modules/time-stamp/package.json
create mode 100644 node_modules/timers-ext/.lint
create mode 100644 node_modules/timers-ext/.npmignore
create mode 100644 node_modules/timers-ext/.travis.yml
create mode 100644 node_modules/timers-ext/CHANGES
create mode 100644 node_modules/timers-ext/LICENSE
create mode 100644 node_modules/timers-ext/README.md
create mode 100644 node_modules/timers-ext/delay.js
create mode 100644 node_modules/timers-ext/max-timeout.js
create mode 100644 node_modules/timers-ext/once.js
create mode 100644 node_modules/timers-ext/package.json
create mode 100644 node_modules/timers-ext/test/delay.js
create mode 100644 node_modules/timers-ext/test/max-timeout.js
create mode 100644 node_modules/timers-ext/test/once.js
create mode 100644 node_modules/timers-ext/test/throttle.js
create mode 100644 node_modules/timers-ext/test/valid-timeout.js
create mode 100644 node_modules/timers-ext/throttle.js
create mode 100644 node_modules/timers-ext/valid-timeout.js
create mode 100644 node_modules/toposort-class/.eslintrc
create mode 100644 node_modules/toposort-class/.gitattributes
create mode 100644 node_modules/toposort-class/.npmignore
create mode 100644 node_modules/toposort-class/LICENSE
create mode 100644 node_modules/toposort-class/README.md
create mode 100644 node_modules/toposort-class/benchmark/0.3.1/toposort.js
create mode 100644 node_modules/toposort-class/benchmark/README.md
create mode 100644 node_modules/toposort-class/benchmark/general.js
create mode 100644 node_modules/toposort-class/benchmark/results.csv
create mode 100644 node_modules/toposort-class/build/toposort.js
create mode 100644 node_modules/toposort-class/build/toposort.min.js
create mode 100644 node_modules/toposort-class/index.js
create mode 100644 node_modules/toposort-class/package.json
create mode 100644 node_modules/transformers/.npmignore
create mode 100644 node_modules/transformers/README.md
create mode 100644 node_modules/transformers/history.md
create mode 100644 node_modules/transformers/lib/shared.js
create mode 100644 node_modules/transformers/lib/transformers.js
create mode 120000 node_modules/transformers/node_modules/.bin/uglifyjs
create mode 100644 node_modules/transformers/node_modules/is-promise/.npmignore
create mode 100644 node_modules/transformers/node_modules/is-promise/.travis.yml
create mode 100644 node_modules/transformers/node_modules/is-promise/LICENSE
create mode 100644 node_modules/transformers/node_modules/is-promise/index.js
create mode 100644 node_modules/transformers/node_modules/is-promise/package.json
create mode 100644 node_modules/transformers/node_modules/is-promise/readme.md
create mode 100644 node_modules/transformers/node_modules/promise/.npmignore
create mode 100644 node_modules/transformers/node_modules/promise/Readme.md
create mode 100644 node_modules/transformers/node_modules/promise/index.js
create mode 100644 node_modules/transformers/node_modules/promise/package.json
create mode 100644 node_modules/transformers/node_modules/source-map/.npmignore
create mode 100644 node_modules/transformers/node_modules/source-map/.travis.yml
create mode 100644 node_modules/transformers/node_modules/source-map/CHANGELOG.md
create mode 100644 node_modules/transformers/node_modules/source-map/LICENSE
create mode 100644 node_modules/transformers/node_modules/source-map/Makefile.dryice.js
create mode 100644 node_modules/transformers/node_modules/source-map/README.md
create mode 100644 node_modules/transformers/node_modules/source-map/build/assert-shim.js
create mode 100644 node_modules/transformers/node_modules/source-map/build/mini-require.js
create mode 100644 node_modules/transformers/node_modules/source-map/build/prefix-source-map.jsm
create mode 100644 node_modules/transformers/node_modules/source-map/build/prefix-utils.jsm
create mode 100644 node_modules/transformers/node_modules/source-map/build/suffix-browser.js
create mode 100644 node_modules/transformers/node_modules/source-map/build/suffix-source-map.jsm
create mode 100644 node_modules/transformers/node_modules/source-map/build/suffix-utils.jsm
create mode 100644 node_modules/transformers/node_modules/source-map/build/test-prefix.js
create mode 100644 node_modules/transformers/node_modules/source-map/build/test-suffix.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/array-set.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/base64-vlq.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/base64.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/binary-search.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/mapping-list.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/source-map-consumer.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/source-map-generator.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/source-node.js
create mode 100644 node_modules/transformers/node_modules/source-map/lib/source-map/util.js
create mode 100644 node_modules/transformers/node_modules/source-map/package.json
create mode 100755 node_modules/transformers/node_modules/source-map/test/run-tests.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-api.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-array-set.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-base64-vlq.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-base64.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-binary-search.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-dog-fooding.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-consumer.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-generator.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-source-node.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/test-util.js
create mode 100644 node_modules/transformers/node_modules/source-map/test/source-map/util.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/.npmignore
create mode 100644 node_modules/transformers/node_modules/uglify-js/README.md
create mode 100755 node_modules/transformers/node_modules/uglify-js/bin/uglifyjs
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/ast.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/compress.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/output.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/parse.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/scope.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/transform.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/lib/utils.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/package.json
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/labels.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/loops.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/properties.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/test/compress/switch.js
create mode 100755 node_modules/transformers/node_modules/uglify-js/test/run-tests.js
create mode 100644 node_modules/transformers/node_modules/uglify-js/tools/node.js
create mode 100644 node_modules/transformers/package.json
create mode 100644 node_modules/type-is/HISTORY.md
create mode 100644 node_modules/type-is/LICENSE
create mode 100644 node_modules/type-is/README.md
create mode 100644 node_modules/type-is/index.js
create mode 100644 node_modules/type-is/package.json
create mode 100644 node_modules/uglify-js/LICENSE
create mode 100644 node_modules/uglify-js/README.md
create mode 100644 node_modules/uglify-js/bin/extract-props.js
create mode 100755 node_modules/uglify-js/bin/uglifyjs
create mode 100644 node_modules/uglify-js/lib/ast.js
create mode 100644 node_modules/uglify-js/lib/compress.js
create mode 100644 node_modules/uglify-js/lib/mozilla-ast.js
create mode 100644 node_modules/uglify-js/lib/output.js
create mode 100644 node_modules/uglify-js/lib/parse.js
create mode 100644 node_modules/uglify-js/lib/propmangle.js
create mode 100644 node_modules/uglify-js/lib/scope.js
create mode 100644 node_modules/uglify-js/lib/sourcemap.js
create mode 100644 node_modules/uglify-js/lib/transform.js
create mode 100644 node_modules/uglify-js/lib/utils.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/CHANGELOG.md
create mode 100644 node_modules/uglify-js/node_modules/source-map/LICENSE
create mode 100644 node_modules/uglify-js/node_modules/source-map/README.md
create mode 100644 node_modules/uglify-js/node_modules/source-map/dist/source-map.debug.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/dist/source-map.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/dist/source-map.min.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/dist/source-map.min.js.map
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/array-set.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/base64-vlq.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/base64.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/binary-search.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/mapping-list.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/quick-sort.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/source-map-consumer.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/source-map-generator.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/source-node.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/lib/util.js
create mode 100644 node_modules/uglify-js/node_modules/source-map/package.json
create mode 100644 node_modules/uglify-js/node_modules/source-map/source-map.js
create mode 100644 node_modules/uglify-js/package.json
create mode 100644 node_modules/uglify-js/tools/domprops.json
create mode 100644 node_modules/uglify-js/tools/exports.js
create mode 100644 node_modules/uglify-js/tools/node.js
create mode 100644 node_modules/uglify-js/tools/props.html
create mode 100644 node_modules/uglify-to-browserify/.npmignore
create mode 100644 node_modules/uglify-to-browserify/.travis.yml
create mode 100644 node_modules/uglify-to-browserify/LICENSE
create mode 100644 node_modules/uglify-to-browserify/README.md
create mode 100644 node_modules/uglify-to-browserify/index.js
create mode 100644 node_modules/uglify-to-browserify/package.json
create mode 100644 node_modules/uglify-to-browserify/test/index.js
create mode 100644 node_modules/umzug/.jshintrc
create mode 100644 node_modules/umzug/.npmignore
create mode 100644 node_modules/umzug/.travis.yml
create mode 100644 node_modules/umzug/CHANGELOG.md
create mode 100644 node_modules/umzug/LICENSE
create mode 100644 node_modules/umzug/README.md
create mode 100644 node_modules/umzug/gulpfile.js
create mode 100644 node_modules/umzug/index.js
create mode 100644 node_modules/umzug/lib/helper.js
create mode 100644 node_modules/umzug/lib/migration.js
create mode 100644 node_modules/umzug/lib/storages/json.js
create mode 100644 node_modules/umzug/lib/storages/none.js
create mode 100644 node_modules/umzug/lib/storages/sequelize.js
create mode 100644 node_modules/umzug/node_modules/lodash/LICENSE
create mode 100644 node_modules/umzug/node_modules/lodash/README.md
create mode 100644 node_modules/umzug/node_modules/lodash/_DataView.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Hash.js
create mode 100644 node_modules/umzug/node_modules/lodash/_LazyWrapper.js
create mode 100644 node_modules/umzug/node_modules/lodash/_ListCache.js
create mode 100644 node_modules/umzug/node_modules/lodash/_LodashWrapper.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Map.js
create mode 100644 node_modules/umzug/node_modules/lodash/_MapCache.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Promise.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Set.js
create mode 100644 node_modules/umzug/node_modules/lodash/_SetCache.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Stack.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Symbol.js
create mode 100644 node_modules/umzug/node_modules/lodash/_Uint8Array.js
create mode 100644 node_modules/umzug/node_modules/lodash/_WeakMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_addMapEntry.js
create mode 100644 node_modules/umzug/node_modules/lodash/_addSetEntry.js
create mode 100644 node_modules/umzug/node_modules/lodash/_apply.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayAggregator.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayEach.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayEachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayEvery.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayFilter.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayIncludes.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayIncludesWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayLikeKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayPush.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayReduce.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayReduceRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arraySample.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arraySampleSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arrayShuffle.js
create mode 100644 node_modules/umzug/node_modules/lodash/_arraySome.js
create mode 100644 node_modules/umzug/node_modules/lodash/_asciiSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/_asciiToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_asciiWords.js
create mode 100644 node_modules/umzug/node_modules/lodash/_assignMergeValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_assignValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_assocIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseAggregator.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseAssign.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseAssignIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseAssignValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseClamp.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseClone.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseConforms.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseConformsTo.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseCreate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseDelay.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseDifference.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseEach.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseEachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseEvery.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseExtremum.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFill.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFilter.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFindIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFindKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFlatten.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFor.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseForOwn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseForOwnRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseForRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseFunctions.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseGet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseGetAllKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseGetTag.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseGt.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseHasIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseInRange.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIndexOfWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIntersection.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseInverter.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseInvoke.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsArguments.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsArrayBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsDate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsEqual.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsEqualDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsMatch.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsNaN.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsNative.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIsTypedArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseIteratee.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseKeysIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseLodash.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseLt.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMatches.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMatchesProperty.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMean.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMerge.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseMergeDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseNth.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseOrderBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePick.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePickBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseProperty.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePropertyDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePropertyOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePullAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/_basePullAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseRandom.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseRange.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseReduce.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseRepeat.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseRest.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSample.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSampleSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSetData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSetToString.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseShuffle.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSlice.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSome.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSortBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSortedIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSortedIndexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSortedUniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseSum.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseTimes.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseToNumber.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseToPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseToString.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseUnary.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseUniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseUnset.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseUpdate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseValues.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseWrapperValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseXor.js
create mode 100644 node_modules/umzug/node_modules/lodash/_baseZipObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cacheHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_castArrayLikeObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/_castFunction.js
create mode 100644 node_modules/umzug/node_modules/lodash/_castPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/_castRest.js
create mode 100644 node_modules/umzug/node_modules/lodash/_castSlice.js
create mode 100644 node_modules/umzug/node_modules/lodash/_charsEndIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/_charsStartIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneArrayBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneDataView.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneSymbol.js
create mode 100644 node_modules/umzug/node_modules/lodash/_cloneTypedArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_compareAscending.js
create mode 100644 node_modules/umzug/node_modules/lodash/_compareMultiple.js
create mode 100644 node_modules/umzug/node_modules/lodash/_composeArgs.js
create mode 100644 node_modules/umzug/node_modules/lodash/_composeArgsRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/_copyArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_copyObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/_copySymbols.js
create mode 100644 node_modules/umzug/node_modules/lodash/_copySymbolsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_coreJsData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_countHolders.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createAggregator.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createAssigner.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createBaseEach.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createBaseFor.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createBind.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createCaseFirst.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createCompounder.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createCtor.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createCurry.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createFind.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createFlow.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createHybrid.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createInverter.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createMathOperation.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createOver.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createPadding.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createPartial.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createRange.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createRecurry.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createRelationalOperation.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createRound.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createToPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/_createWrap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_customDefaultsAssignIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_customDefaultsMerge.js
create mode 100644 node_modules/umzug/node_modules/lodash/_customOmitClone.js
create mode 100644 node_modules/umzug/node_modules/lodash/_deburrLetter.js
create mode 100644 node_modules/umzug/node_modules/lodash/_defineProperty.js
create mode 100644 node_modules/umzug/node_modules/lodash/_equalArrays.js
create mode 100644 node_modules/umzug/node_modules/lodash/_equalByTag.js
create mode 100644 node_modules/umzug/node_modules/lodash/_equalObjects.js
create mode 100644 node_modules/umzug/node_modules/lodash/_escapeHtmlChar.js
create mode 100644 node_modules/umzug/node_modules/lodash/_escapeStringChar.js
create mode 100644 node_modules/umzug/node_modules/lodash/_flatRest.js
create mode 100644 node_modules/umzug/node_modules/lodash/_freeGlobal.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getAllKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getAllKeysIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getFuncName.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getHolder.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getMapData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getMatchData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getNative.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getPrototype.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getRawTag.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getSymbols.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getSymbolsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getTag.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getView.js
create mode 100644 node_modules/umzug/node_modules/lodash/_getWrapDetails.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hasPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hasUnicode.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hasUnicodeWord.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hashClear.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hashDelete.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hashGet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hashHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_hashSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_initCloneArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_initCloneByTag.js
create mode 100644 node_modules/umzug/node_modules/lodash/_initCloneObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/_insertWrapDetails.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isFlattenable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isIterateeCall.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isKeyable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isLaziable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isMaskable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isMasked.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isPrototype.js
create mode 100644 node_modules/umzug/node_modules/lodash/_isStrictComparable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_iteratorToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_lazyClone.js
create mode 100644 node_modules/umzug/node_modules/lodash/_lazyReverse.js
create mode 100644 node_modules/umzug/node_modules/lodash/_lazyValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/_listCacheClear.js
create mode 100644 node_modules/umzug/node_modules/lodash/_listCacheDelete.js
create mode 100644 node_modules/umzug/node_modules/lodash/_listCacheGet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_listCacheHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_listCacheSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapCacheClear.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapCacheDelete.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapCacheGet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapCacheHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapCacheSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mapToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_matchesStrictComparable.js
create mode 100644 node_modules/umzug/node_modules/lodash/_memoizeCapped.js
create mode 100644 node_modules/umzug/node_modules/lodash/_mergeData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_metaMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/_nativeCreate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_nativeKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/_nativeKeysIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/_nodeUtil.js
create mode 100644 node_modules/umzug/node_modules/lodash/_objectToString.js
create mode 100644 node_modules/umzug/node_modules/lodash/_overArg.js
create mode 100644 node_modules/umzug/node_modules/lodash/_overRest.js
create mode 100644 node_modules/umzug/node_modules/lodash/_parent.js
create mode 100644 node_modules/umzug/node_modules/lodash/_reEscape.js
create mode 100644 node_modules/umzug/node_modules/lodash/_reEvaluate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_reInterpolate.js
create mode 100644 node_modules/umzug/node_modules/lodash/_realNames.js
create mode 100644 node_modules/umzug/node_modules/lodash/_reorder.js
create mode 100644 node_modules/umzug/node_modules/lodash/_replaceHolders.js
create mode 100644 node_modules/umzug/node_modules/lodash/_root.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setCacheAdd.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setCacheHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setData.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setToPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setToString.js
create mode 100644 node_modules/umzug/node_modules/lodash/_setWrapToString.js
create mode 100644 node_modules/umzug/node_modules/lodash/_shortOut.js
create mode 100644 node_modules/umzug/node_modules/lodash/_shuffleSelf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stackClear.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stackDelete.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stackGet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stackHas.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stackSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/_strictIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_strictLastIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stringSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stringToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_stringToPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/_toKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/_toSource.js
create mode 100644 node_modules/umzug/node_modules/lodash/_unescapeHtmlChar.js
create mode 100644 node_modules/umzug/node_modules/lodash/_unicodeSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/_unicodeToArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/_unicodeWords.js
create mode 100644 node_modules/umzug/node_modules/lodash/_updateWrapDetails.js
create mode 100644 node_modules/umzug/node_modules/lodash/_wrapperClone.js
create mode 100644 node_modules/umzug/node_modules/lodash/add.js
create mode 100644 node_modules/umzug/node_modules/lodash/after.js
create mode 100644 node_modules/umzug/node_modules/lodash/array.js
create mode 100644 node_modules/umzug/node_modules/lodash/ary.js
create mode 100644 node_modules/umzug/node_modules/lodash/assign.js
create mode 100644 node_modules/umzug/node_modules/lodash/assignIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/assignInWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/assignWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/at.js
create mode 100644 node_modules/umzug/node_modules/lodash/attempt.js
create mode 100644 node_modules/umzug/node_modules/lodash/before.js
create mode 100644 node_modules/umzug/node_modules/lodash/bind.js
create mode 100644 node_modules/umzug/node_modules/lodash/bindAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/bindKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/camelCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/capitalize.js
create mode 100644 node_modules/umzug/node_modules/lodash/castArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/ceil.js
create mode 100644 node_modules/umzug/node_modules/lodash/chain.js
create mode 100644 node_modules/umzug/node_modules/lodash/chunk.js
create mode 100644 node_modules/umzug/node_modules/lodash/clamp.js
create mode 100644 node_modules/umzug/node_modules/lodash/clone.js
create mode 100644 node_modules/umzug/node_modules/lodash/cloneDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/cloneDeepWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/cloneWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/collection.js
create mode 100644 node_modules/umzug/node_modules/lodash/commit.js
create mode 100644 node_modules/umzug/node_modules/lodash/compact.js
create mode 100644 node_modules/umzug/node_modules/lodash/concat.js
create mode 100644 node_modules/umzug/node_modules/lodash/cond.js
create mode 100644 node_modules/umzug/node_modules/lodash/conforms.js
create mode 100644 node_modules/umzug/node_modules/lodash/conformsTo.js
create mode 100644 node_modules/umzug/node_modules/lodash/constant.js
create mode 100644 node_modules/umzug/node_modules/lodash/core.js
create mode 100644 node_modules/umzug/node_modules/lodash/core.min.js
create mode 100644 node_modules/umzug/node_modules/lodash/countBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/create.js
create mode 100644 node_modules/umzug/node_modules/lodash/curry.js
create mode 100644 node_modules/umzug/node_modules/lodash/curryRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/date.js
create mode 100644 node_modules/umzug/node_modules/lodash/debounce.js
create mode 100644 node_modules/umzug/node_modules/lodash/deburr.js
create mode 100644 node_modules/umzug/node_modules/lodash/defaultTo.js
create mode 100644 node_modules/umzug/node_modules/lodash/defaults.js
create mode 100644 node_modules/umzug/node_modules/lodash/defaultsDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/defer.js
create mode 100644 node_modules/umzug/node_modules/lodash/delay.js
create mode 100644 node_modules/umzug/node_modules/lodash/difference.js
create mode 100644 node_modules/umzug/node_modules/lodash/differenceBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/differenceWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/divide.js
create mode 100644 node_modules/umzug/node_modules/lodash/drop.js
create mode 100644 node_modules/umzug/node_modules/lodash/dropRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/dropRightWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/dropWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/each.js
create mode 100644 node_modules/umzug/node_modules/lodash/eachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/endsWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/entries.js
create mode 100644 node_modules/umzug/node_modules/lodash/entriesIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/eq.js
create mode 100644 node_modules/umzug/node_modules/lodash/escape.js
create mode 100644 node_modules/umzug/node_modules/lodash/escapeRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/every.js
create mode 100644 node_modules/umzug/node_modules/lodash/extend.js
create mode 100644 node_modules/umzug/node_modules/lodash/extendWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fill.js
create mode 100644 node_modules/umzug/node_modules/lodash/filter.js
create mode 100644 node_modules/umzug/node_modules/lodash/find.js
create mode 100644 node_modules/umzug/node_modules/lodash/findIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/findKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/findLast.js
create mode 100644 node_modules/umzug/node_modules/lodash/findLastIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/findLastKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/first.js
create mode 100644 node_modules/umzug/node_modules/lodash/flatMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/flatMapDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/flatMapDepth.js
create mode 100644 node_modules/umzug/node_modules/lodash/flatten.js
create mode 100644 node_modules/umzug/node_modules/lodash/flattenDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/flattenDepth.js
create mode 100644 node_modules/umzug/node_modules/lodash/flip.js
create mode 100644 node_modules/umzug/node_modules/lodash/floor.js
create mode 100644 node_modules/umzug/node_modules/lodash/flow.js
create mode 100644 node_modules/umzug/node_modules/lodash/flowRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/forEach.js
create mode 100644 node_modules/umzug/node_modules/lodash/forEachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/forIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/forInRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/forOwn.js
create mode 100644 node_modules/umzug/node_modules/lodash/forOwnRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/F.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/T.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/__.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/_baseConvert.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/_convertBrowser.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/_falseOptions.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/_mapping.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/_util.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/add.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/after.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/all.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/allPass.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/always.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/any.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/anyPass.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/apply.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/array.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/ary.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assign.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignInAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignInAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignInWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assignWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assoc.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/assocPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/at.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/attempt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/before.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/bind.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/bindAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/bindKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/camelCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/capitalize.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/castArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/ceil.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/chain.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/chunk.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/clamp.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/clone.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/cloneDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/cloneDeepWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/cloneWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/collection.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/commit.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/compact.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/complement.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/compose.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/concat.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/cond.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/conforms.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/conformsTo.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/constant.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/contains.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/convert.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/countBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/create.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/curry.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/curryN.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/curryRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/curryRightN.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/date.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/debounce.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/deburr.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defaultTo.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defaults.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defaultsAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defaultsDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defaultsDeepAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/defer.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/delay.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/difference.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/differenceBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/differenceWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dissoc.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dissocPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/divide.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/drop.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dropLast.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dropLastWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dropRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dropRightWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/dropWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/each.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/eachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/endsWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/entries.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/entriesIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/eq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/equals.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/escape.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/escapeRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/every.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/extend.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/extendAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/extendAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/extendWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/fill.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/filter.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/find.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findIndexFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findLast.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findLastFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findLastIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findLastIndexFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/findLastKey.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/first.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flatMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flatMapDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flatMapDepth.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flatten.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flattenDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flattenDepth.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flip.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/floor.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flow.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/flowRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forEach.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forEachRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forInRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forOwn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/forOwnRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/fromPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/function.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/functions.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/functionsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/get.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/getOr.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/groupBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/gt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/gte.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/has.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/hasIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/head.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/identical.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/identity.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/inRange.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/includes.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/includesFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/indexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/indexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/indexOfFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/init.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/initial.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/intersection.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/intersectionBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/intersectionWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invert.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invertBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invertObj.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invoke.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invokeArgs.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invokeArgsMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/invokeMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isArguments.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isArrayBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isArrayLike.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isArrayLikeObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isBoolean.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isDate.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isElement.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isEmpty.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isEqual.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isEqualWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isError.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isFinite.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isFunction.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isLength.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isMatch.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isMatchWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isNaN.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isNative.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isNil.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isNull.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isNumber.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isObjectLike.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isPlainObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isSafeInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isString.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isSymbol.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isTypedArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isUndefined.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isWeakMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/isWeakSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/iteratee.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/join.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/juxt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/kebabCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/keyBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/keys.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/keysIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lang.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/last.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lastIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lastIndexOfFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lowerCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lowerFirst.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/lte.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/map.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mapKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mapValues.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/matches.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/matchesProperty.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/math.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/max.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/maxBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mean.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/meanBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/memoize.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/merge.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mergeAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mergeAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mergeWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/method.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/methodOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/min.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/minBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/mixin.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/multiply.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/nAry.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/negate.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/next.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/noop.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/now.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/nth.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/nthArg.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/number.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/object.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/omit.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/omitAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/omitBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/once.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/orderBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/over.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/overArgs.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/overEvery.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/overSome.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pad.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/padChars.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/padCharsEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/padCharsStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/padEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/padStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/parseInt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/partial.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/partialRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/partition.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/path.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pathEq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pathOr.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/paths.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pick.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pickAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pickBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pipe.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/placeholder.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/plant.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pluck.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/prop.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/propEq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/propOr.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/property.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/propertyOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/props.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pull.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pullAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pullAllBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pullAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/pullAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/random.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/range.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/rangeRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/rangeStep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/rangeStepRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/rearg.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/reduce.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/reduceRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/reject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/remove.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/repeat.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/replace.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/rest.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/restFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/result.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/reverse.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/round.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sample.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sampleSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/seq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/set.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/setWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/shuffle.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/size.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/slice.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/snakeCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/some.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedIndexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedLastIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedLastIndexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedLastIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedUniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sortedUniqBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/split.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/spread.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/spreadFrom.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/startCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/startsWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/string.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/stubArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/stubFalse.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/stubObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/stubString.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/stubTrue.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/subtract.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sum.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/sumBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/symmetricDifference.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/symmetricDifferenceBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/symmetricDifferenceWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/tail.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/take.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/takeLast.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/takeLastWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/takeRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/takeRightWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/takeWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/tap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/template.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/templateSettings.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/throttle.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/thru.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/times.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toFinite.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toIterator.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toJSON.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toLength.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toLower.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toNumber.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toPairsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toPlainObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toSafeInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toString.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/toUpper.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/transform.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trim.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trimChars.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trimCharsEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trimCharsStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trimEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/trimStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/truncate.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unapply.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unary.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unescape.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/union.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unionBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unionWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/uniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/uniqBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/uniqWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/uniqueId.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unnest.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unset.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unzip.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/unzipWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/update.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/updateWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/upperCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/upperFirst.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/useWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/util.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/value.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/valueOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/values.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/valuesIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/where.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/whereEq.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/without.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/words.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrap.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrapperAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrapperChain.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrapperLodash.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrapperReverse.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/wrapperValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/xor.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/xorBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/xorWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zip.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zipAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zipObj.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zipObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zipObjectDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/fp/zipWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/fromPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/function.js
create mode 100644 node_modules/umzug/node_modules/lodash/functions.js
create mode 100644 node_modules/umzug/node_modules/lodash/functionsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/get.js
create mode 100644 node_modules/umzug/node_modules/lodash/groupBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/gt.js
create mode 100644 node_modules/umzug/node_modules/lodash/gte.js
create mode 100644 node_modules/umzug/node_modules/lodash/has.js
create mode 100644 node_modules/umzug/node_modules/lodash/hasIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/head.js
create mode 100644 node_modules/umzug/node_modules/lodash/identity.js
create mode 100644 node_modules/umzug/node_modules/lodash/inRange.js
create mode 100644 node_modules/umzug/node_modules/lodash/includes.js
create mode 100644 node_modules/umzug/node_modules/lodash/index.js
create mode 100644 node_modules/umzug/node_modules/lodash/indexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/initial.js
create mode 100644 node_modules/umzug/node_modules/lodash/intersection.js
create mode 100644 node_modules/umzug/node_modules/lodash/intersectionBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/intersectionWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/invert.js
create mode 100644 node_modules/umzug/node_modules/lodash/invertBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/invoke.js
create mode 100644 node_modules/umzug/node_modules/lodash/invokeMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/isArguments.js
create mode 100644 node_modules/umzug/node_modules/lodash/isArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/isArrayBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/isArrayLike.js
create mode 100644 node_modules/umzug/node_modules/lodash/isArrayLikeObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/isBoolean.js
create mode 100644 node_modules/umzug/node_modules/lodash/isBuffer.js
create mode 100644 node_modules/umzug/node_modules/lodash/isDate.js
create mode 100644 node_modules/umzug/node_modules/lodash/isElement.js
create mode 100644 node_modules/umzug/node_modules/lodash/isEmpty.js
create mode 100644 node_modules/umzug/node_modules/lodash/isEqual.js
create mode 100644 node_modules/umzug/node_modules/lodash/isEqualWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/isError.js
create mode 100644 node_modules/umzug/node_modules/lodash/isFinite.js
create mode 100644 node_modules/umzug/node_modules/lodash/isFunction.js
create mode 100644 node_modules/umzug/node_modules/lodash/isInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/isLength.js
create mode 100644 node_modules/umzug/node_modules/lodash/isMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/isMatch.js
create mode 100644 node_modules/umzug/node_modules/lodash/isMatchWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/isNaN.js
create mode 100644 node_modules/umzug/node_modules/lodash/isNative.js
create mode 100644 node_modules/umzug/node_modules/lodash/isNil.js
create mode 100644 node_modules/umzug/node_modules/lodash/isNull.js
create mode 100644 node_modules/umzug/node_modules/lodash/isNumber.js
create mode 100644 node_modules/umzug/node_modules/lodash/isObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/isObjectLike.js
create mode 100644 node_modules/umzug/node_modules/lodash/isPlainObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/isRegExp.js
create mode 100644 node_modules/umzug/node_modules/lodash/isSafeInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/isSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/isString.js
create mode 100644 node_modules/umzug/node_modules/lodash/isSymbol.js
create mode 100644 node_modules/umzug/node_modules/lodash/isTypedArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/isUndefined.js
create mode 100644 node_modules/umzug/node_modules/lodash/isWeakMap.js
create mode 100644 node_modules/umzug/node_modules/lodash/isWeakSet.js
create mode 100644 node_modules/umzug/node_modules/lodash/iteratee.js
create mode 100644 node_modules/umzug/node_modules/lodash/join.js
create mode 100644 node_modules/umzug/node_modules/lodash/kebabCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/keyBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/keys.js
create mode 100644 node_modules/umzug/node_modules/lodash/keysIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/lang.js
create mode 100644 node_modules/umzug/node_modules/lodash/last.js
create mode 100644 node_modules/umzug/node_modules/lodash/lastIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/lodash.js
create mode 100644 node_modules/umzug/node_modules/lodash/lodash.min.js
create mode 100644 node_modules/umzug/node_modules/lodash/lowerCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/lowerFirst.js
create mode 100644 node_modules/umzug/node_modules/lodash/lt.js
create mode 100644 node_modules/umzug/node_modules/lodash/lte.js
create mode 100644 node_modules/umzug/node_modules/lodash/map.js
create mode 100644 node_modules/umzug/node_modules/lodash/mapKeys.js
create mode 100644 node_modules/umzug/node_modules/lodash/mapValues.js
create mode 100644 node_modules/umzug/node_modules/lodash/matches.js
create mode 100644 node_modules/umzug/node_modules/lodash/matchesProperty.js
create mode 100644 node_modules/umzug/node_modules/lodash/math.js
create mode 100644 node_modules/umzug/node_modules/lodash/max.js
create mode 100644 node_modules/umzug/node_modules/lodash/maxBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/mean.js
create mode 100644 node_modules/umzug/node_modules/lodash/meanBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/memoize.js
create mode 100644 node_modules/umzug/node_modules/lodash/merge.js
create mode 100644 node_modules/umzug/node_modules/lodash/mergeWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/method.js
create mode 100644 node_modules/umzug/node_modules/lodash/methodOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/min.js
create mode 100644 node_modules/umzug/node_modules/lodash/minBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/mixin.js
create mode 100644 node_modules/umzug/node_modules/lodash/multiply.js
create mode 100644 node_modules/umzug/node_modules/lodash/negate.js
create mode 100644 node_modules/umzug/node_modules/lodash/next.js
create mode 100644 node_modules/umzug/node_modules/lodash/noop.js
create mode 100644 node_modules/umzug/node_modules/lodash/now.js
create mode 100644 node_modules/umzug/node_modules/lodash/nth.js
create mode 100644 node_modules/umzug/node_modules/lodash/nthArg.js
create mode 100644 node_modules/umzug/node_modules/lodash/number.js
create mode 100644 node_modules/umzug/node_modules/lodash/object.js
create mode 100644 node_modules/umzug/node_modules/lodash/omit.js
create mode 100644 node_modules/umzug/node_modules/lodash/omitBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/once.js
create mode 100644 node_modules/umzug/node_modules/lodash/orderBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/over.js
create mode 100644 node_modules/umzug/node_modules/lodash/overArgs.js
create mode 100644 node_modules/umzug/node_modules/lodash/overEvery.js
create mode 100644 node_modules/umzug/node_modules/lodash/overSome.js
create mode 100644 node_modules/umzug/node_modules/lodash/package.json
create mode 100644 node_modules/umzug/node_modules/lodash/pad.js
create mode 100644 node_modules/umzug/node_modules/lodash/padEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/padStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/parseInt.js
create mode 100644 node_modules/umzug/node_modules/lodash/partial.js
create mode 100644 node_modules/umzug/node_modules/lodash/partialRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/partition.js
create mode 100644 node_modules/umzug/node_modules/lodash/pick.js
create mode 100644 node_modules/umzug/node_modules/lodash/pickBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/plant.js
create mode 100644 node_modules/umzug/node_modules/lodash/property.js
create mode 100644 node_modules/umzug/node_modules/lodash/propertyOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/pull.js
create mode 100644 node_modules/umzug/node_modules/lodash/pullAll.js
create mode 100644 node_modules/umzug/node_modules/lodash/pullAllBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/pullAllWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/pullAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/random.js
create mode 100644 node_modules/umzug/node_modules/lodash/range.js
create mode 100644 node_modules/umzug/node_modules/lodash/rangeRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/rearg.js
create mode 100644 node_modules/umzug/node_modules/lodash/reduce.js
create mode 100644 node_modules/umzug/node_modules/lodash/reduceRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/reject.js
create mode 100644 node_modules/umzug/node_modules/lodash/remove.js
create mode 100644 node_modules/umzug/node_modules/lodash/repeat.js
create mode 100644 node_modules/umzug/node_modules/lodash/replace.js
create mode 100644 node_modules/umzug/node_modules/lodash/rest.js
create mode 100644 node_modules/umzug/node_modules/lodash/result.js
create mode 100644 node_modules/umzug/node_modules/lodash/reverse.js
create mode 100644 node_modules/umzug/node_modules/lodash/round.js
create mode 100644 node_modules/umzug/node_modules/lodash/sample.js
create mode 100644 node_modules/umzug/node_modules/lodash/sampleSize.js
create mode 100644 node_modules/umzug/node_modules/lodash/seq.js
create mode 100644 node_modules/umzug/node_modules/lodash/set.js
create mode 100644 node_modules/umzug/node_modules/lodash/setWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/shuffle.js
create mode 100644 node_modules/umzug/node_modules/lodash/size.js
create mode 100644 node_modules/umzug/node_modules/lodash/slice.js
create mode 100644 node_modules/umzug/node_modules/lodash/snakeCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/some.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedIndexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedLastIndex.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedLastIndexBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedLastIndexOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedUniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/sortedUniqBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/split.js
create mode 100644 node_modules/umzug/node_modules/lodash/spread.js
create mode 100644 node_modules/umzug/node_modules/lodash/startCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/startsWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/string.js
create mode 100644 node_modules/umzug/node_modules/lodash/stubArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/stubFalse.js
create mode 100644 node_modules/umzug/node_modules/lodash/stubObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/stubString.js
create mode 100644 node_modules/umzug/node_modules/lodash/stubTrue.js
create mode 100644 node_modules/umzug/node_modules/lodash/subtract.js
create mode 100644 node_modules/umzug/node_modules/lodash/sum.js
create mode 100644 node_modules/umzug/node_modules/lodash/sumBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/tail.js
create mode 100644 node_modules/umzug/node_modules/lodash/take.js
create mode 100644 node_modules/umzug/node_modules/lodash/takeRight.js
create mode 100644 node_modules/umzug/node_modules/lodash/takeRightWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/takeWhile.js
create mode 100644 node_modules/umzug/node_modules/lodash/tap.js
create mode 100644 node_modules/umzug/node_modules/lodash/template.js
create mode 100644 node_modules/umzug/node_modules/lodash/templateSettings.js
create mode 100644 node_modules/umzug/node_modules/lodash/throttle.js
create mode 100644 node_modules/umzug/node_modules/lodash/thru.js
create mode 100644 node_modules/umzug/node_modules/lodash/times.js
create mode 100644 node_modules/umzug/node_modules/lodash/toArray.js
create mode 100644 node_modules/umzug/node_modules/lodash/toFinite.js
create mode 100644 node_modules/umzug/node_modules/lodash/toInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/toIterator.js
create mode 100644 node_modules/umzug/node_modules/lodash/toJSON.js
create mode 100644 node_modules/umzug/node_modules/lodash/toLength.js
create mode 100644 node_modules/umzug/node_modules/lodash/toLower.js
create mode 100644 node_modules/umzug/node_modules/lodash/toNumber.js
create mode 100644 node_modules/umzug/node_modules/lodash/toPairs.js
create mode 100644 node_modules/umzug/node_modules/lodash/toPairsIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/toPath.js
create mode 100644 node_modules/umzug/node_modules/lodash/toPlainObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/toSafeInteger.js
create mode 100644 node_modules/umzug/node_modules/lodash/toString.js
create mode 100644 node_modules/umzug/node_modules/lodash/toUpper.js
create mode 100644 node_modules/umzug/node_modules/lodash/transform.js
create mode 100644 node_modules/umzug/node_modules/lodash/trim.js
create mode 100644 node_modules/umzug/node_modules/lodash/trimEnd.js
create mode 100644 node_modules/umzug/node_modules/lodash/trimStart.js
create mode 100644 node_modules/umzug/node_modules/lodash/truncate.js
create mode 100644 node_modules/umzug/node_modules/lodash/unary.js
create mode 100644 node_modules/umzug/node_modules/lodash/unescape.js
create mode 100644 node_modules/umzug/node_modules/lodash/union.js
create mode 100644 node_modules/umzug/node_modules/lodash/unionBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/unionWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/uniq.js
create mode 100644 node_modules/umzug/node_modules/lodash/uniqBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/uniqWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/uniqueId.js
create mode 100644 node_modules/umzug/node_modules/lodash/unset.js
create mode 100644 node_modules/umzug/node_modules/lodash/unzip.js
create mode 100644 node_modules/umzug/node_modules/lodash/unzipWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/update.js
create mode 100644 node_modules/umzug/node_modules/lodash/updateWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/upperCase.js
create mode 100644 node_modules/umzug/node_modules/lodash/upperFirst.js
create mode 100644 node_modules/umzug/node_modules/lodash/util.js
create mode 100644 node_modules/umzug/node_modules/lodash/value.js
create mode 100644 node_modules/umzug/node_modules/lodash/valueOf.js
create mode 100644 node_modules/umzug/node_modules/lodash/values.js
create mode 100644 node_modules/umzug/node_modules/lodash/valuesIn.js
create mode 100644 node_modules/umzug/node_modules/lodash/without.js
create mode 100644 node_modules/umzug/node_modules/lodash/words.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrap.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrapperAt.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrapperChain.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrapperLodash.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrapperReverse.js
create mode 100644 node_modules/umzug/node_modules/lodash/wrapperValue.js
create mode 100644 node_modules/umzug/node_modules/lodash/xor.js
create mode 100644 node_modules/umzug/node_modules/lodash/xorBy.js
create mode 100644 node_modules/umzug/node_modules/lodash/xorWith.js
create mode 100644 node_modules/umzug/node_modules/lodash/zip.js
create mode 100644 node_modules/umzug/node_modules/lodash/zipObject.js
create mode 100644 node_modules/umzug/node_modules/lodash/zipObjectDeep.js
create mode 100644 node_modules/umzug/node_modules/lodash/zipWith.js
create mode 100644 node_modules/umzug/package.json
create mode 100644 node_modules/umzug/test/helper.js
create mode 100644 node_modules/umzug/test/index/constructor.test.js
create mode 100644 node_modules/umzug/test/index/down.test.js
create mode 100644 node_modules/umzug/test/index/execute.test.js
create mode 100644 node_modules/umzug/test/index/executed.test.js
create mode 100644 node_modules/umzug/test/index/index.js
create mode 100644 node_modules/umzug/test/index/pending.test.js
create mode 100644 node_modules/umzug/test/index/up.test.js
create mode 100644 node_modules/umzug/test/storages/index.js
create mode 100644 node_modules/umzug/test/storages/json.test.js
create mode 100644 node_modules/umzug/test/storages/none.test.js
create mode 100644 node_modules/umzug/test/storages/sequelize.test.js
create mode 100644 node_modules/umzug/yarn.lock
create mode 100644 node_modules/unc-path-regex/LICENSE
create mode 100644 node_modules/unc-path-regex/README.md
create mode 100644 node_modules/unc-path-regex/index.js
create mode 100644 node_modules/unc-path-regex/package.json
create mode 100644 node_modules/unique-stream/.npmignore
create mode 100644 node_modules/unique-stream/.travis.yml
create mode 100644 node_modules/unique-stream/LICENSE
create mode 100644 node_modules/unique-stream/README.md
create mode 100644 node_modules/unique-stream/index.js
create mode 100644 node_modules/unique-stream/package.json
create mode 100644 node_modules/unique-stream/test/index.js
create mode 100644 node_modules/unpipe/HISTORY.md
create mode 100644 node_modules/unpipe/LICENSE
create mode 100644 node_modules/unpipe/README.md
create mode 100644 node_modules/unpipe/index.js
create mode 100644 node_modules/unpipe/package.json
create mode 100755 node_modules/user-home/cli.js
create mode 100644 node_modules/user-home/index.js
create mode 100644 node_modules/user-home/license
create mode 100644 node_modules/user-home/package.json
create mode 100644 node_modules/user-home/readme.md
create mode 100644 node_modules/util-deprecate/History.md
create mode 100644 node_modules/util-deprecate/LICENSE
create mode 100644 node_modules/util-deprecate/README.md
create mode 100644 node_modules/util-deprecate/browser.js
create mode 100644 node_modules/util-deprecate/node.js
create mode 100644 node_modules/util-deprecate/package.json
create mode 100644 node_modules/utils-merge/.travis.yml
create mode 100644 node_modules/utils-merge/LICENSE
create mode 100644 node_modules/utils-merge/README.md
create mode 100644 node_modules/utils-merge/index.js
create mode 100644 node_modules/utils-merge/package.json
create mode 100644 node_modules/uuid/.npmignore
create mode 100644 node_modules/uuid/.travis.yml
create mode 100644 node_modules/uuid/AUTHORS
create mode 100644 node_modules/uuid/HISTORY.md
create mode 100644 node_modules/uuid/LICENSE.md
create mode 100644 node_modules/uuid/README.md
create mode 100755 node_modules/uuid/bin/uuid
create mode 100644 node_modules/uuid/index.js
create mode 100644 node_modules/uuid/lib/bytesToUuid.js
create mode 100644 node_modules/uuid/lib/rng-browser.js
create mode 100644 node_modules/uuid/lib/rng.js
create mode 100644 node_modules/uuid/package.json
create mode 100644 node_modules/uuid/test/mocha.opts
create mode 100644 node_modules/uuid/test/test.js
create mode 100644 node_modules/uuid/v1.js
create mode 100644 node_modules/uuid/v4.js
create mode 100644 node_modules/v8flags/.npmignore
create mode 100644 node_modules/v8flags/LICENSE
create mode 100644 node_modules/v8flags/README.md
create mode 100644 node_modules/v8flags/index.js
create mode 100644 node_modules/v8flags/package.json
create mode 100644 node_modules/validate-npm-package-license/LICENSE
create mode 100644 node_modules/validate-npm-package-license/README.md
create mode 100644 node_modules/validate-npm-package-license/index.js
create mode 100644 node_modules/validate-npm-package-license/package.json
create mode 100644 node_modules/validator/CHANGELOG.md
create mode 100644 node_modules/validator/LICENSE
create mode 100644 node_modules/validator/README.md
create mode 100644 node_modules/validator/index.js
create mode 100644 node_modules/validator/lib/alpha.js
create mode 100644 node_modules/validator/lib/blacklist.js
create mode 100644 node_modules/validator/lib/contains.js
create mode 100644 node_modules/validator/lib/equals.js
create mode 100644 node_modules/validator/lib/escape.js
create mode 100644 node_modules/validator/lib/isAfter.js
create mode 100644 node_modules/validator/lib/isAlpha.js
create mode 100644 node_modules/validator/lib/isAlphanumeric.js
create mode 100644 node_modules/validator/lib/isAscii.js
create mode 100644 node_modules/validator/lib/isBase64.js
create mode 100644 node_modules/validator/lib/isBefore.js
create mode 100644 node_modules/validator/lib/isBoolean.js
create mode 100644 node_modules/validator/lib/isByteLength.js
create mode 100644 node_modules/validator/lib/isCreditCard.js
create mode 100644 node_modules/validator/lib/isCurrency.js
create mode 100644 node_modules/validator/lib/isDataURI.js
create mode 100644 node_modules/validator/lib/isDate.js
create mode 100644 node_modules/validator/lib/isDecimal.js
create mode 100644 node_modules/validator/lib/isDivisibleBy.js
create mode 100644 node_modules/validator/lib/isEmail.js
create mode 100644 node_modules/validator/lib/isFQDN.js
create mode 100644 node_modules/validator/lib/isFloat.js
create mode 100644 node_modules/validator/lib/isFullWidth.js
create mode 100644 node_modules/validator/lib/isHalfWidth.js
create mode 100644 node_modules/validator/lib/isHexColor.js
create mode 100644 node_modules/validator/lib/isHexadecimal.js
create mode 100644 node_modules/validator/lib/isIP.js
create mode 100644 node_modules/validator/lib/isISBN.js
create mode 100644 node_modules/validator/lib/isISIN.js
create mode 100644 node_modules/validator/lib/isISO8601.js
create mode 100644 node_modules/validator/lib/isIn.js
create mode 100644 node_modules/validator/lib/isInt.js
create mode 100644 node_modules/validator/lib/isJSON.js
create mode 100644 node_modules/validator/lib/isLength.js
create mode 100644 node_modules/validator/lib/isLowercase.js
create mode 100644 node_modules/validator/lib/isMACAddress.js
create mode 100644 node_modules/validator/lib/isMD5.js
create mode 100644 node_modules/validator/lib/isMobilePhone.js
create mode 100644 node_modules/validator/lib/isMongoId.js
create mode 100644 node_modules/validator/lib/isMultibyte.js
create mode 100644 node_modules/validator/lib/isNull.js
create mode 100644 node_modules/validator/lib/isNumeric.js
create mode 100644 node_modules/validator/lib/isSurrogatePair.js
create mode 100644 node_modules/validator/lib/isURL.js
create mode 100644 node_modules/validator/lib/isUUID.js
create mode 100644 node_modules/validator/lib/isUppercase.js
create mode 100644 node_modules/validator/lib/isVariableWidth.js
create mode 100644 node_modules/validator/lib/isWhitelisted.js
create mode 100644 node_modules/validator/lib/ltrim.js
create mode 100644 node_modules/validator/lib/matches.js
create mode 100644 node_modules/validator/lib/normalizeEmail.js
create mode 100644 node_modules/validator/lib/rtrim.js
create mode 100644 node_modules/validator/lib/stripLow.js
create mode 100644 node_modules/validator/lib/toBoolean.js
create mode 100644 node_modules/validator/lib/toDate.js
create mode 100644 node_modules/validator/lib/toFloat.js
create mode 100644 node_modules/validator/lib/toInt.js
create mode 100644 node_modules/validator/lib/trim.js
create mode 100644 node_modules/validator/lib/unescape.js
create mode 100644 node_modules/validator/lib/util/assertString.js
create mode 100644 node_modules/validator/lib/util/merge.js
create mode 100644 node_modules/validator/lib/util/toString.js
create mode 100644 node_modules/validator/lib/whitelist.js
create mode 100644 node_modules/validator/package.json
create mode 100644 node_modules/validator/validator.js
create mode 100644 node_modules/validator/validator.min.js
create mode 100644 node_modules/vary/HISTORY.md
create mode 100644 node_modules/vary/LICENSE
create mode 100644 node_modules/vary/README.md
create mode 100644 node_modules/vary/index.js
create mode 100644 node_modules/vary/package.json
create mode 100755 node_modules/vinyl-fs/LICENSE
create mode 100644 node_modules/vinyl-fs/README.md
create mode 100644 node_modules/vinyl-fs/index.js
create mode 100644 node_modules/vinyl-fs/lib/dest/index.js
create mode 100644 node_modules/vinyl-fs/lib/dest/writeContents/index.js
create mode 100644 node_modules/vinyl-fs/lib/dest/writeContents/writeBuffer.js
create mode 100644 node_modules/vinyl-fs/lib/dest/writeContents/writeDir.js
create mode 100644 node_modules/vinyl-fs/lib/dest/writeContents/writeStream.js
create mode 100644 node_modules/vinyl-fs/lib/src/getContents/bufferFile.js
create mode 100644 node_modules/vinyl-fs/lib/src/getContents/index.js
create mode 100644 node_modules/vinyl-fs/lib/src/getContents/readDir.js
create mode 100644 node_modules/vinyl-fs/lib/src/getContents/streamFile.js
create mode 100644 node_modules/vinyl-fs/lib/src/getStats.js
create mode 100644 node_modules/vinyl-fs/lib/src/index.js
create mode 100644 node_modules/vinyl-fs/node_modules/clone/.npmignore
create mode 100644 node_modules/vinyl-fs/node_modules/clone/.travis.yml
create mode 100644 node_modules/vinyl-fs/node_modules/clone/LICENSE
create mode 100644 node_modules/vinyl-fs/node_modules/clone/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/clone/clone.js
create mode 100644 node_modules/vinyl-fs/node_modules/clone/package.json
create mode 100644 node_modules/vinyl-fs/node_modules/clone/test.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/.npmignore
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/.travis.yml
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/LICENSE
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/fs.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/graceful-fs.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/package.json
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/polyfills.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/test/max-open.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/test/open.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/test/readdir-sort.js
create mode 100644 node_modules/vinyl-fs/node_modules/graceful-fs/test/write-then-read.js
create mode 100644 node_modules/vinyl-fs/node_modules/isarray/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/isarray/build/build.js
create mode 100644 node_modules/vinyl-fs/node_modules/isarray/component.json
create mode 100644 node_modules/vinyl-fs/node_modules/isarray/index.js
create mode 100644 node_modules/vinyl-fs/node_modules/isarray/package.json
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/.npmignore
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/LICENSE
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/duplex.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_duplex.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_passthrough.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_readable.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_transform.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/lib/_stream_writable.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/package.json
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/passthrough.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/readable.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/transform.js
create mode 100644 node_modules/vinyl-fs/node_modules/readable-stream/writable.js
create mode 100644 node_modules/vinyl-fs/node_modules/through2/.npmignore
create mode 100644 node_modules/vinyl-fs/node_modules/through2/LICENSE
create mode 100644 node_modules/vinyl-fs/node_modules/through2/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/through2/package.json
create mode 100644 node_modules/vinyl-fs/node_modules/through2/through2.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/LICENSE
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/README.md
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/index.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/lib/cloneBuffer.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/lib/inspectStream.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/lib/isBuffer.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/lib/isNull.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/lib/isStream.js
create mode 100644 node_modules/vinyl-fs/node_modules/vinyl/package.json
create mode 100644 node_modules/vinyl-fs/package.json
create mode 100644 node_modules/vinyl/LICENSE
create mode 100644 node_modules/vinyl/README.md
create mode 100644 node_modules/vinyl/index.js
create mode 100644 node_modules/vinyl/lib/cloneBuffer.js
create mode 100644 node_modules/vinyl/lib/inspectStream.js
create mode 100644 node_modules/vinyl/lib/isBuffer.js
create mode 100644 node_modules/vinyl/lib/isNull.js
create mode 100644 node_modules/vinyl/lib/isStream.js
create mode 100644 node_modules/vinyl/package.json
create mode 100644 node_modules/void-elements/.gitattributes
create mode 100644 node_modules/void-elements/.npmignore
create mode 100644 node_modules/void-elements/.travis.yml
create mode 100644 node_modules/void-elements/LICENSE
create mode 100644 node_modules/void-elements/README.md
create mode 100644 node_modules/void-elements/index.js
create mode 100644 node_modules/void-elements/package.json
create mode 100644 node_modules/void-elements/pre-publish.js
create mode 100644 node_modules/void-elements/test/index.js
create mode 100644 node_modules/which-module/CHANGELOG.md
create mode 100644 node_modules/which-module/LICENSE
create mode 100644 node_modules/which-module/README.md
create mode 100644 node_modules/which-module/index.js
create mode 100644 node_modules/which-module/package.json
create mode 100644 node_modules/which/CHANGELOG.md
create mode 100644 node_modules/which/LICENSE
create mode 100644 node_modules/which/README.md
create mode 100755 node_modules/which/bin/which
create mode 100644 node_modules/which/package.json
create mode 100644 node_modules/which/which.js
create mode 100644 node_modules/window-size/LICENSE-MIT
create mode 100644 node_modules/window-size/README.md
create mode 100644 node_modules/window-size/index.js
create mode 100644 node_modules/window-size/package.json
create mode 100644 node_modules/with/.npmignore
create mode 100644 node_modules/with/LICENSE
create mode 100644 node_modules/with/README.md
create mode 100644 node_modules/with/index.js
create mode 120000 node_modules/with/node_modules/.bin/acorn
create mode 100644 node_modules/with/node_modules/acorn/.editorconfig
create mode 100644 node_modules/with/node_modules/acorn/.gitattributes
create mode 100644 node_modules/with/node_modules/acorn/.npmignore
create mode 100644 node_modules/with/node_modules/acorn/.tern-project
create mode 100644 node_modules/with/node_modules/acorn/.travis.yml
create mode 100644 node_modules/with/node_modules/acorn/AUTHORS
create mode 100644 node_modules/with/node_modules/acorn/LICENSE
create mode 100644 node_modules/with/node_modules/acorn/README.md
create mode 100755 node_modules/with/node_modules/acorn/bin/acorn
create mode 100644 node_modules/with/node_modules/acorn/bin/build-acorn.js
create mode 100644 node_modules/with/node_modules/acorn/bin/generate-identifier-regex.js
create mode 100755 node_modules/with/node_modules/acorn/bin/prepublish.sh
create mode 100755 node_modules/with/node_modules/acorn/bin/update_authors.sh
create mode 100755 node_modules/with/node_modules/acorn/bin/without_eval
create mode 100644 node_modules/with/node_modules/acorn/dist/.keep
create mode 100644 node_modules/with/node_modules/acorn/dist/acorn.js
create mode 100644 node_modules/with/node_modules/acorn/dist/acorn_csp.js
create mode 100644 node_modules/with/node_modules/acorn/dist/acorn_loose.js
create mode 100644 node_modules/with/node_modules/acorn/dist/walk.js
create mode 100644 node_modules/with/node_modules/acorn/package.json
create mode 100755 node_modules/with/node_modules/acorn/src/expression.js
create mode 100644 node_modules/with/node_modules/acorn/src/identifier.js
create mode 100644 node_modules/with/node_modules/acorn/src/index.js
create mode 100755 node_modules/with/node_modules/acorn/src/location.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/acorn_loose.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/expression.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/index.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/parseutil.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/state.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/statement.js
create mode 100644 node_modules/with/node_modules/acorn/src/loose/tokenize.js
create mode 100755 node_modules/with/node_modules/acorn/src/lval.js
create mode 100755 node_modules/with/node_modules/acorn/src/node.js
create mode 100644 node_modules/with/node_modules/acorn/src/options.js
create mode 100644 node_modules/with/node_modules/acorn/src/parseutil.js
create mode 100644 node_modules/with/node_modules/acorn/src/state.js
create mode 100644 node_modules/with/node_modules/acorn/src/statement.js
create mode 100644 node_modules/with/node_modules/acorn/src/tokencontext.js
create mode 100644 node_modules/with/node_modules/acorn/src/tokenize.js
create mode 100644 node_modules/with/node_modules/acorn/src/tokentype.js
create mode 100644 node_modules/with/node_modules/acorn/src/util.js
create mode 100644 node_modules/with/node_modules/acorn/src/walk/index.js
create mode 100644 node_modules/with/node_modules/acorn/src/whitespace.js
create mode 100644 node_modules/with/package.json
create mode 100644 node_modules/wkx/.editorconfig
create mode 100644 node_modules/wkx/.jshintignore
create mode 100644 node_modules/wkx/.jshintrc
create mode 100644 node_modules/wkx/.npmignore
create mode 100644 node_modules/wkx/.travis.yml
create mode 100644 node_modules/wkx/LICENSE.txt
create mode 100644 node_modules/wkx/README.md
create mode 100644 node_modules/wkx/bower.json
create mode 100644 node_modules/wkx/build/update-testdata.js
create mode 100644 node_modules/wkx/dist/wkx.js
create mode 100644 node_modules/wkx/dist/wkx.min.js
create mode 100644 node_modules/wkx/lib/binaryreader.js
create mode 100644 node_modules/wkx/lib/binarywriter.js
create mode 100644 node_modules/wkx/lib/geometry.js
create mode 100644 node_modules/wkx/lib/geometrycollection.js
create mode 100644 node_modules/wkx/lib/linestring.js
create mode 100644 node_modules/wkx/lib/multilinestring.js
create mode 100644 node_modules/wkx/lib/multipoint.js
create mode 100644 node_modules/wkx/lib/multipolygon.js
create mode 100644 node_modules/wkx/lib/point.js
create mode 100644 node_modules/wkx/lib/polygon.js
create mode 100644 node_modules/wkx/lib/types.js
create mode 100644 node_modules/wkx/lib/wktparser.js
create mode 100644 node_modules/wkx/lib/wkx.js
create mode 100644 node_modules/wkx/lib/zigzag.js
create mode 100644 node_modules/wkx/package.json
create mode 100644 node_modules/wkx/test/binaryreader.js
create mode 100644 node_modules/wkx/test/binarywriter.js
create mode 100644 node_modules/wkx/test/geojson.js
create mode 100644 node_modules/wkx/test/testdata.json
create mode 100644 node_modules/wkx/test/testdataM.json
create mode 100644 node_modules/wkx/test/testdataZ.json
create mode 100644 node_modules/wkx/test/testdataZM.json
create mode 100644 node_modules/wkx/test/twkb.js
create mode 100644 node_modules/wkx/test/wkx.js
create mode 100644 node_modules/wkx/test/zigzag.js
create mode 100644 node_modules/wordwrap/LICENSE
create mode 100644 node_modules/wordwrap/README.markdown
create mode 100644 node_modules/wordwrap/example/center.js
create mode 100644 node_modules/wordwrap/example/meat.js
create mode 100644 node_modules/wordwrap/index.js
create mode 100644 node_modules/wordwrap/package.json
create mode 100644 node_modules/wordwrap/test/break.js
create mode 100644 node_modules/wordwrap/test/idleness.txt
create mode 100644 node_modules/wordwrap/test/wrap.js
create mode 100755 node_modules/wrap-ansi/index.js
create mode 100644 node_modules/wrap-ansi/license
create mode 100644 node_modules/wrap-ansi/package.json
create mode 100644 node_modules/wrap-ansi/readme.md
create mode 100644 node_modules/wrappy/LICENSE
create mode 100644 node_modules/wrappy/README.md
create mode 100644 node_modules/wrappy/package.json
create mode 100644 node_modules/wrappy/wrappy.js
create mode 100644 node_modules/xtend/.jshintrc
create mode 100644 node_modules/xtend/.npmignore
create mode 100644 node_modules/xtend/LICENCE
create mode 100644 node_modules/xtend/Makefile
create mode 100644 node_modules/xtend/README.md
create mode 100644 node_modules/xtend/immutable.js
create mode 100644 node_modules/xtend/mutable.js
create mode 100644 node_modules/xtend/package.json
create mode 100644 node_modules/xtend/test.js
create mode 100644 node_modules/y18n/LICENSE
create mode 100644 node_modules/y18n/README.md
create mode 100644 node_modules/y18n/index.js
create mode 100644 node_modules/y18n/package.json
create mode 100644 node_modules/yallist/LICENSE
create mode 100644 node_modules/yallist/README.md
create mode 100644 node_modules/yallist/iterator.js
create mode 100644 node_modules/yallist/package.json
create mode 100644 node_modules/yallist/yallist.js
create mode 100644 node_modules/yargs-parser/CHANGELOG.md
create mode 100644 node_modules/yargs-parser/LICENSE.txt
create mode 100644 node_modules/yargs-parser/README.md
create mode 100644 node_modules/yargs-parser/index.js
create mode 100644 node_modules/yargs-parser/lib/tokenize-arg-string.js
create mode 100644 node_modules/yargs-parser/node_modules/camelcase/index.js
create mode 100644 node_modules/yargs-parser/node_modules/camelcase/license
create mode 100644 node_modules/yargs-parser/node_modules/camelcase/package.json
create mode 100644 node_modules/yargs-parser/node_modules/camelcase/readme.md
create mode 100644 node_modules/yargs-parser/package.json
create mode 100644 node_modules/yargs/CHANGELOG.md
create mode 100644 node_modules/yargs/LICENSE
create mode 100644 node_modules/yargs/README.md
create mode 100644 node_modules/yargs/completion.sh.hbs
create mode 100644 node_modules/yargs/index.js
create mode 100644 node_modules/yargs/lib/completion.js
create mode 100644 node_modules/yargs/lib/parser.js
create mode 100644 node_modules/yargs/lib/usage.js
create mode 100644 node_modules/yargs/lib/validation.js
create mode 100644 node_modules/yargs/package.json
create mode 100644 package.json
create mode 100644 public/stylesheets/style.css
create mode 100644 routes/index.js
create mode 100644 routes/users.js
create mode 100644 seeders/20170425042049-seed_data_contact.js
create mode 100644 views/error.jade
create mode 100644 views/index.jade
create mode 100644 views/layout.jade
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
diff --git a/README.md b/README.md
index 6379a41..768d012 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,14 @@
-# api-basic
\ No newline at end of file
+# api-basic
+
+My Phone Contact App
+
+Route
+/api/users GET Get all the users
+/api/users/:id GET Get a single users
+/api/users POST Create a user
+/api/users/:id DELETE Delete a user
+/api/users/:id PUT Update a user with new info
+
+To Use
+npm install
+npm start
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..bdd6eb6
--- /dev/null
+++ b/app.js
@@ -0,0 +1,46 @@
+var express = require('express');
+var path = require('path');
+var favicon = require('serve-favicon');
+var logger = require('morgan');
+var cookieParser = require('cookie-parser');
+var bodyParser = require('body-parser');
+
+var index = require('./routes/index');
+var users = require('./routes/users');
+
+var app = express();
+
+// view engine setup
+app.set('views', path.join(__dirname, 'views'));
+app.set('view engine', 'jade');
+
+// uncomment after placing your favicon in /public
+//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
+app.use(logger('dev'));
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({ extended: false }));
+app.use(cookieParser());
+app.use(express.static(path.join(__dirname, 'public')));
+
+app.use('/', index);
+app.use('/api/users', users);
+
+// catch 404 and forward to error handler
+app.use(function(req, res, next) {
+ var err = new Error('Not Found');
+ err.status = 404;
+ next(err);
+});
+
+// error handler
+app.use(function(err, req, res, next) {
+ // set locals, only providing error in development
+ res.locals.message = err.message;
+ res.locals.error = req.app.get('env') === 'development' ? err : {};
+
+ // render the error page
+ res.status(err.status || 500);
+ res.render('error');
+});
+
+module.exports = app;
diff --git a/bin/www b/bin/www
new file mode 100755
index 0000000..e49e193
--- /dev/null
+++ b/bin/www
@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var app = require('../app');
+var debug = require('debug')('api-basic:server');
+var http = require('http');
+
+/**
+ * Get port from environment and store in Express.
+ */
+
+var port = normalizePort(process.env.PORT || '3000');
+app.set('port', port);
+
+/**
+ * Create HTTP server.
+ */
+
+var server = http.createServer(app);
+
+/**
+ * Listen on provided port, on all network interfaces.
+ */
+
+server.listen(port);
+server.on('error', onError);
+server.on('listening', onListening);
+
+/**
+ * Normalize a port into a number, string, or false.
+ */
+
+function normalizePort(val) {
+ var port = parseInt(val, 10);
+
+ if (isNaN(port)) {
+ // named pipe
+ return val;
+ }
+
+ if (port >= 0) {
+ // port number
+ return port;
+ }
+
+ return false;
+}
+
+/**
+ * Event listener for HTTP server "error" event.
+ */
+
+function onError(error) {
+ if (error.syscall !== 'listen') {
+ throw error;
+ }
+
+ var bind = typeof port === 'string'
+ ? 'Pipe ' + port
+ : 'Port ' + port;
+
+ // handle specific listen errors with friendly messages
+ switch (error.code) {
+ case 'EACCES':
+ console.error(bind + ' requires elevated privileges');
+ process.exit(1);
+ break;
+ case 'EADDRINUSE':
+ console.error(bind + ' is already in use');
+ process.exit(1);
+ break;
+ default:
+ throw error;
+ }
+}
+
+/**
+ * Event listener for HTTP server "listening" event.
+ */
+
+function onListening() {
+ var addr = server.address();
+ var bind = typeof addr === 'string'
+ ? 'pipe ' + addr
+ : 'port ' + addr.port;
+ debug('Listening on ' + bind);
+}
diff --git a/config/config.json b/config/config.json
new file mode 100644
index 0000000..9ddbe59
--- /dev/null
+++ b/config/config.json
@@ -0,0 +1,23 @@
+{
+ "development": {
+ "username": "postgres",
+ "password": "postgres1",
+ "database": "api-basic",
+ "host": "127.0.0.1",
+ "dialect": "postgres"
+ },
+ "test": {
+ "username": "root",
+ "password": null,
+ "database": "database_test",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ },
+ "production": {
+ "username": "root",
+ "password": null,
+ "database": "database_production",
+ "host": "127.0.0.1",
+ "dialect": "mysql"
+ }
+}
diff --git a/controllers/user.js b/controllers/user.js
new file mode 100644
index 0000000..e78be76
--- /dev/null
+++ b/controllers/user.js
@@ -0,0 +1,62 @@
+const db = require('../models')
+const methods = {}
+// router.get('/', userController.getAll );
+methods.getAll = function(req, res, next) {
+ db.Contact.findAll()
+ .then( user => {
+ res.json(user)
+ })
+ .catch( error => {
+ res.json({error})
+ })
+}// getAll
+
+// router.get('/:id', userController.getById );
+methods.getById = function(req, res, next) {
+ db.Contact.findById(req.params.id)
+ .then( contact => {
+ res.json(contact)
+ })
+ .catch( error => {
+ res.json({error})
+ })
+}
+// router.post('/', userController.createUser );
+methods.createUser = function(req, res, next) {
+ db.Contact.create(
+ {name: req.body.name, phone: parseInt(req.body.phone)}
+ ) .then(data => {
+ res.send("data berhasil ditambahkan !")
+ })
+ .catch( error => {
+ res.json({error})
+ })
+}
+// router.delete('/:id', userController.deleteById );
+methods.deleteById = function(req, res, next) {
+ db.Contact.destroy({
+ where: {id:req.params.id}
+ })
+ .then( contact => {
+ res.send("berhasil dihapus")
+ })
+ .catch( error => {
+ res.json({error})
+ })
+}
+// router.put('/:id', userController.updateById );
+methods.updateById = function(req, res, next) {
+ db.Contact.update({
+ name: req.body.name,
+ phone: parseInt(req.body.phone)
+ },{
+ where: {id:req.params.id}
+ })
+ .then( contact => {
+ res.send('berhasil di update')
+ })
+ .catch( error => {
+ res.json({error})
+ })
+}
+module.exports = methods
diff --git a/migrations/20170425040805-create-contact.js b/migrations/20170425040805-create-contact.js
new file mode 100644
index 0000000..5d76a41
--- /dev/null
+++ b/migrations/20170425040805-create-contact.js
@@ -0,0 +1,30 @@
+'use strict';
+module.exports = {
+ up: function(queryInterface, Sequelize) {
+ return queryInterface.createTable('Contacts', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: Sequelize.INTEGER
+ },
+ name: {
+ type: Sequelize.STRING
+ },
+ phone: {
+ type: Sequelize.INTEGER
+ },
+ createdAt: {
+ allowNull: false,
+ type: Sequelize.DATE
+ },
+ updatedAt: {
+ allowNull: false,
+ type: Sequelize.DATE
+ }
+ });
+ },
+ down: function(queryInterface, Sequelize) {
+ return queryInterface.dropTable('Contacts');
+ }
+};
\ No newline at end of file
diff --git a/models/contact.js b/models/contact.js
new file mode 100644
index 0000000..1e9875f
--- /dev/null
+++ b/models/contact.js
@@ -0,0 +1,14 @@
+'use strict';
+module.exports = function(sequelize, DataTypes) {
+ var Contact = sequelize.define('Contact', {
+ name: DataTypes.STRING,
+ phone: DataTypes.INTEGER
+ }, {
+ classMethods: {
+ associate: function(models) {
+ // associations can be defined here
+ }
+ }
+ });
+ return Contact;
+};
\ No newline at end of file
diff --git a/models/index.js b/models/index.js
new file mode 100644
index 0000000..7540dba
--- /dev/null
+++ b/models/index.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+var Sequelize = require('sequelize');
+var basename = path.basename(module.filename);
+var env = process.env.NODE_ENV || 'development';
+var config = require(__dirname + '/../config/config.json')[env];
+var db = {};
+
+if (config.use_env_variable) {
+ var sequelize = new Sequelize(process.env[config.use_env_variable]);
+} else {
+ var sequelize = new Sequelize(config.database, config.username, config.password, config);
+}
+
+fs
+ .readdirSync(__dirname)
+ .filter(function(file) {
+ return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
+ })
+ .forEach(function(file) {
+ var model = sequelize['import'](path.join(__dirname, file));
+ db[model.name] = model;
+ });
+
+Object.keys(db).forEach(function(modelName) {
+ if (db[modelName].associate) {
+ db[modelName].associate(db);
+ }
+});
+
+db.sequelize = sequelize;
+db.Sequelize = Sequelize;
+
+module.exports = db;
diff --git a/node_modules/.bin/acorn b/node_modules/.bin/acorn
new file mode 120000
index 0000000..cf76760
--- /dev/null
+++ b/node_modules/.bin/acorn
@@ -0,0 +1 @@
+../acorn/bin/acorn
\ No newline at end of file
diff --git a/node_modules/.bin/cleancss b/node_modules/.bin/cleancss
new file mode 120000
index 0000000..2a3439e
--- /dev/null
+++ b/node_modules/.bin/cleancss
@@ -0,0 +1 @@
+../clean-css/bin/cleancss
\ No newline at end of file
diff --git a/node_modules/.bin/cross-env b/node_modules/.bin/cross-env
new file mode 120000
index 0000000..f68f48a
--- /dev/null
+++ b/node_modules/.bin/cross-env
@@ -0,0 +1 @@
+../cross-env/dist/bin/cross-env.js
\ No newline at end of file
diff --git a/node_modules/.bin/css-beautify b/node_modules/.bin/css-beautify
new file mode 120000
index 0000000..d9b8ee2
--- /dev/null
+++ b/node_modules/.bin/css-beautify
@@ -0,0 +1 @@
+../js-beautify/js/bin/css-beautify.js
\ No newline at end of file
diff --git a/node_modules/.bin/editorconfig b/node_modules/.bin/editorconfig
new file mode 120000
index 0000000..a151e0b
--- /dev/null
+++ b/node_modules/.bin/editorconfig
@@ -0,0 +1 @@
+../editorconfig/bin/editorconfig
\ No newline at end of file
diff --git a/node_modules/.bin/gulp b/node_modules/.bin/gulp
new file mode 120000
index 0000000..5de7332
--- /dev/null
+++ b/node_modules/.bin/gulp
@@ -0,0 +1 @@
+../gulp/bin/gulp.js
\ No newline at end of file
diff --git a/node_modules/.bin/html-beautify b/node_modules/.bin/html-beautify
new file mode 120000
index 0000000..c17c69c
--- /dev/null
+++ b/node_modules/.bin/html-beautify
@@ -0,0 +1 @@
+../js-beautify/js/bin/html-beautify.js
\ No newline at end of file
diff --git a/node_modules/.bin/jade b/node_modules/.bin/jade
new file mode 120000
index 0000000..65a3bac
--- /dev/null
+++ b/node_modules/.bin/jade
@@ -0,0 +1 @@
+../jade/bin/jade.js
\ No newline at end of file
diff --git a/node_modules/.bin/js-beautify b/node_modules/.bin/js-beautify
new file mode 120000
index 0000000..548ddf4
--- /dev/null
+++ b/node_modules/.bin/js-beautify
@@ -0,0 +1 @@
+../js-beautify/js/bin/js-beautify.js
\ No newline at end of file
diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime
new file mode 120000
index 0000000..fbb7ee0
--- /dev/null
+++ b/node_modules/.bin/mime
@@ -0,0 +1 @@
+../mime/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/mkdirp b/node_modules/.bin/mkdirp
new file mode 120000
index 0000000..017896c
--- /dev/null
+++ b/node_modules/.bin/mkdirp
@@ -0,0 +1 @@
+../mkdirp/bin/cmd.js
\ No newline at end of file
diff --git a/node_modules/.bin/nopt b/node_modules/.bin/nopt
new file mode 120000
index 0000000..6b6566e
--- /dev/null
+++ b/node_modules/.bin/nopt
@@ -0,0 +1 @@
+../nopt/bin/nopt.js
\ No newline at end of file
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
new file mode 120000
index 0000000..317eb29
--- /dev/null
+++ b/node_modules/.bin/semver
@@ -0,0 +1 @@
+../semver/bin/semver
\ No newline at end of file
diff --git a/node_modules/.bin/sequelize b/node_modules/.bin/sequelize
new file mode 120000
index 0000000..c7e502b
--- /dev/null
+++ b/node_modules/.bin/sequelize
@@ -0,0 +1 @@
+../sequelize-cli/bin/sequelize
\ No newline at end of file
diff --git a/node_modules/.bin/strip-bom b/node_modules/.bin/strip-bom
new file mode 120000
index 0000000..ba65fdf
--- /dev/null
+++ b/node_modules/.bin/strip-bom
@@ -0,0 +1 @@
+../strip-bom/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/uglifyjs b/node_modules/.bin/uglifyjs
new file mode 120000
index 0000000..fef3468
--- /dev/null
+++ b/node_modules/.bin/uglifyjs
@@ -0,0 +1 @@
+../uglify-js/bin/uglifyjs
\ No newline at end of file
diff --git a/node_modules/.bin/user-home b/node_modules/.bin/user-home
new file mode 120000
index 0000000..d72d76b
--- /dev/null
+++ b/node_modules/.bin/user-home
@@ -0,0 +1 @@
+../user-home/cli.js
\ No newline at end of file
diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid
new file mode 120000
index 0000000..b3e45bc
--- /dev/null
+++ b/node_modules/.bin/uuid
@@ -0,0 +1 @@
+../uuid/bin/uuid
\ No newline at end of file
diff --git a/node_modules/.bin/which b/node_modules/.bin/which
new file mode 120000
index 0000000..f62471c
--- /dev/null
+++ b/node_modules/.bin/which
@@ -0,0 +1 @@
+../which/bin/which
\ No newline at end of file
diff --git a/node_modules/@types/geojson/LICENSE b/node_modules/@types/geojson/LICENSE
new file mode 100644
index 0000000..2107107
--- /dev/null
+++ b/node_modules/@types/geojson/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation. 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/node_modules/@types/geojson/README.md b/node_modules/@types/geojson/README.md
new file mode 100644
index 0000000..1f9a39c
--- /dev/null
+++ b/node_modules/@types/geojson/README.md
@@ -0,0 +1,16 @@
+# Installation
+> `npm install --save @types/geojson`
+
+# Summary
+This package contains type definitions for GeoJSON Format Specification Revision (http://geojson.org/).
+
+# Details
+Files were exported from https://www.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/geojson
+
+Additional Details
+ * Last updated: Mon, 17 Apr 2017 17:55:17 GMT
+ * Dependencies: none
+ * Global values: GeoJSON
+
+# Credits
+These definitions were written by Jacob Bruun .
diff --git a/node_modules/@types/geojson/index.d.ts b/node_modules/@types/geojson/index.d.ts
new file mode 100644
index 0000000..9902b97
--- /dev/null
+++ b/node_modules/@types/geojson/index.d.ts
@@ -0,0 +1,121 @@
+// Type definitions for GeoJSON Format Specification Revision 1.0
+// Project: http://geojson.org/
+// Definitions by: Jacob Bruun
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+
+export as namespace GeoJSON;
+
+/***
+* http://geojson.org/geojson-spec.html#geojson-objects
+*/
+export interface GeoJsonObject {
+ type: string;
+ bbox?: number[];
+ crs?: CoordinateReferenceSystem;
+}
+
+/***
+* http://geojson.org/geojson-spec.html#positions
+*/
+export type Position = number[];
+
+/***
+* http://geojson.org/geojson-spec.html#geometry-objects
+*/
+export interface DirectGeometryObject extends GeoJsonObject {
+ coordinates: Position[][][] | Position[][] | Position[] | Position;
+}
+/**
+ * GeometryObject supports geometry collection as well
+ */
+export type GeometryObject = DirectGeometryObject | GeometryCollection;
+
+/***
+* http://geojson.org/geojson-spec.html#point
+*/
+export interface Point extends DirectGeometryObject {
+ type: 'Point';
+ coordinates: Position;
+}
+
+/***
+* http://geojson.org/geojson-spec.html#multipoint
+*/
+export interface MultiPoint extends DirectGeometryObject {
+ type: 'MultiPoint';
+ coordinates: Position[];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#linestring
+*/
+export interface LineString extends DirectGeometryObject {
+ type: 'LineString';
+ coordinates: Position[];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#multilinestring
+*/
+export interface MultiLineString extends DirectGeometryObject {
+ type: 'MultiLineString';
+ coordinates: Position[][];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#polygon
+*/
+export interface Polygon extends DirectGeometryObject {
+ type: 'Polygon';
+ coordinates: Position[][];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#multipolygon
+*/
+export interface MultiPolygon extends DirectGeometryObject {
+ type: 'MultiPolygon';
+ coordinates: Position[][][];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#geometry-collection
+*/
+export interface GeometryCollection extends GeoJsonObject {
+ type: 'GeometryCollection';
+ geometries: GeometryObject[];
+}
+
+/***
+* http://geojson.org/geojson-spec.html#feature-objects
+*/
+export interface Feature extends GeoJsonObject {
+ type: 'Feature';
+ geometry: T;
+ properties: {} | null;
+ id?: string;
+}
+
+/***
+* http://geojson.org/geojson-spec.html#feature-collection-objects
+*/
+export interface FeatureCollection extends GeoJsonObject {
+ type: 'FeatureCollection';
+ features: Array>;
+}
+
+/***
+* http://geojson.org/geojson-spec.html#coordinate-reference-system-objects
+*/
+export interface CoordinateReferenceSystem {
+ type: string;
+ properties: any;
+}
+
+export interface NamedCoordinateReferenceSystem extends CoordinateReferenceSystem {
+ properties: { name: string };
+}
+
+export interface LinkedCoordinateReferenceSystem extends CoordinateReferenceSystem {
+ properties: { href: string; type: string };
+}
diff --git a/node_modules/@types/geojson/package.json b/node_modules/@types/geojson/package.json
new file mode 100644
index 0000000..51d5583
--- /dev/null
+++ b/node_modules/@types/geojson/package.json
@@ -0,0 +1,80 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "@types/geojson@^1.0.0",
+ "scope": "@types",
+ "escapedName": "@types%2fgeojson",
+ "name": "@types/geojson",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/terraformer"
+ ]
+ ],
+ "_from": "@types/geojson@>=1.0.0 <2.0.0",
+ "_id": "@types/geojson@1.0.2",
+ "_inCache": true,
+ "_location": "/@types/geojson",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/geojson-1.0.2.tgz_1492451765652_0.5249417354352772"
+ },
+ "_npmUser": {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ },
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "@types/geojson@^1.0.0",
+ "scope": "@types",
+ "escapedName": "@types%2fgeojson",
+ "name": "@types/geojson",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/terraformer"
+ ],
+ "_resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz",
+ "_shasum": "b02d10ab028e2928ac592a051aaa4981a1941d03",
+ "_shrinkwrap": null,
+ "_spec": "@types/geojson@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/terraformer",
+ "contributors": [
+ {
+ "name": "Jacob Bruun",
+ "url": "https://github.com/cobster/"
+ }
+ ],
+ "dependencies": {},
+ "description": "TypeScript definitions for GeoJSON Format Specification Revision",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "b02d10ab028e2928ac592a051aaa4981a1941d03",
+ "tarball": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz"
+ },
+ "license": "MIT",
+ "main": "",
+ "maintainers": [
+ {
+ "name": "types",
+ "email": "ts-npm-types@microsoft.com"
+ }
+ ],
+ "name": "@types/geojson",
+ "optionalDependencies": {},
+ "peerDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "https://www.github.com/DefinitelyTyped/DefinitelyTyped.git"
+ },
+ "scripts": {},
+ "typeScriptVersion": "2.0",
+ "typesPublisherContentHash": "8af0f83b55578253a8217e74c8a6b4d11cf8aad1b82772cf45162e9ebc4eb776",
+ "version": "1.0.2"
+}
diff --git a/node_modules/abbrev/LICENSE b/node_modules/abbrev/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/abbrev/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+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/node_modules/abbrev/README.md b/node_modules/abbrev/README.md
new file mode 100644
index 0000000..99746fe
--- /dev/null
+++ b/node_modules/abbrev/README.md
@@ -0,0 +1,23 @@
+# abbrev-js
+
+Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).
+
+Usage:
+
+ var abbrev = require("abbrev");
+ abbrev("foo", "fool", "folding", "flop");
+
+ // returns:
+ { fl: 'flop'
+ , flo: 'flop'
+ , flop: 'flop'
+ , fol: 'folding'
+ , fold: 'folding'
+ , foldi: 'folding'
+ , foldin: 'folding'
+ , folding: 'folding'
+ , foo: 'foo'
+ , fool: 'fool'
+ }
+
+This is handy for command-line scripts, or other cases where you want to be able to accept shorthands.
diff --git a/node_modules/abbrev/abbrev.js b/node_modules/abbrev/abbrev.js
new file mode 100644
index 0000000..7b1dc5d
--- /dev/null
+++ b/node_modules/abbrev/abbrev.js
@@ -0,0 +1,61 @@
+module.exports = exports = abbrev.abbrev = abbrev
+
+abbrev.monkeyPatch = monkeyPatch
+
+function monkeyPatch () {
+ Object.defineProperty(Array.prototype, 'abbrev', {
+ value: function () { return abbrev(this) },
+ enumerable: false, configurable: true, writable: true
+ })
+
+ Object.defineProperty(Object.prototype, 'abbrev', {
+ value: function () { return abbrev(Object.keys(this)) },
+ enumerable: false, configurable: true, writable: true
+ })
+}
+
+function abbrev (list) {
+ if (arguments.length !== 1 || !Array.isArray(list)) {
+ list = Array.prototype.slice.call(arguments, 0)
+ }
+ for (var i = 0, l = list.length, args = [] ; i < l ; i ++) {
+ args[i] = typeof list[i] === "string" ? list[i] : String(list[i])
+ }
+
+ // sort them lexicographically, so that they're next to their nearest kin
+ args = args.sort(lexSort)
+
+ // walk through each, seeing how much it has in common with the next and previous
+ var abbrevs = {}
+ , prev = ""
+ for (var i = 0, l = args.length ; i < l ; i ++) {
+ var current = args[i]
+ , next = args[i + 1] || ""
+ , nextMatches = true
+ , prevMatches = true
+ if (current === next) continue
+ for (var j = 0, cl = current.length ; j < cl ; j ++) {
+ var curChar = current.charAt(j)
+ nextMatches = nextMatches && curChar === next.charAt(j)
+ prevMatches = prevMatches && curChar === prev.charAt(j)
+ if (!nextMatches && !prevMatches) {
+ j ++
+ break
+ }
+ }
+ prev = current
+ if (j === cl) {
+ abbrevs[current] = current
+ continue
+ }
+ for (var a = current.substr(0, j) ; j <= cl ; j ++) {
+ abbrevs[a] = current
+ a += current.charAt(j)
+ }
+ }
+ return abbrevs
+}
+
+function lexSort (a, b) {
+ return a === b ? 0 : a > b ? 1 : -1
+}
diff --git a/node_modules/abbrev/package.json b/node_modules/abbrev/package.json
new file mode 100644
index 0000000..6474c41
--- /dev/null
+++ b/node_modules/abbrev/package.json
@@ -0,0 +1,92 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "abbrev@1",
+ "scope": null,
+ "escapedName": "abbrev",
+ "name": "abbrev",
+ "rawSpec": "1",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/nopt"
+ ]
+ ],
+ "_from": "abbrev@>=1.0.0 <2.0.0",
+ "_id": "abbrev@1.1.0",
+ "_inCache": true,
+ "_location": "/abbrev",
+ "_nodeVersion": "8.0.0-pre",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/abbrev-1.1.0.tgz_1487054000015_0.9229173036292195"
+ },
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "_npmVersion": "4.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "abbrev@1",
+ "scope": null,
+ "escapedName": "abbrev",
+ "name": "abbrev",
+ "rawSpec": "1",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/nopt"
+ ],
+ "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "_shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f",
+ "_shrinkwrap": null,
+ "_spec": "abbrev@1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/nopt",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/abbrev-js/issues"
+ },
+ "dependencies": {},
+ "description": "Like ruby's abbrev module, but in js",
+ "devDependencies": {
+ "tap": "^10.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f",
+ "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz"
+ },
+ "files": [
+ "abbrev.js"
+ ],
+ "gitHead": "7136d4d95449dc44115d4f78b80ec907724f64e0",
+ "homepage": "https://github.com/isaacs/abbrev-js#readme",
+ "license": "ISC",
+ "main": "abbrev.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "abbrev",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
+ },
+ "scripts": {
+ "postpublish": "git push origin --all; git push origin --tags",
+ "postversion": "npm publish",
+ "preversion": "npm test",
+ "test": "tap test.js --100"
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md
new file mode 100644
index 0000000..0477ed7
--- /dev/null
+++ b/node_modules/accepts/HISTORY.md
@@ -0,0 +1,212 @@
+1.3.3 / 2016-05-02
+==================
+
+ * deps: mime-types@~2.1.11
+ - deps: mime-db@~1.23.0
+ * deps: negotiator@0.6.1
+ - perf: improve `Accept` parsing speed
+ - perf: improve `Accept-Charset` parsing speed
+ - perf: improve `Accept-Encoding` parsing speed
+ - perf: improve `Accept-Language` parsing speed
+
+1.3.2 / 2016-03-08
+==================
+
+ * deps: mime-types@~2.1.10
+ - Fix extension of `application/dash+xml`
+ - Update primary extension for `audio/mp4`
+ - deps: mime-db@~1.22.0
+
+1.3.1 / 2016-01-19
+==================
+
+ * deps: mime-types@~2.1.9
+ - deps: mime-db@~1.21.0
+
+1.3.0 / 2015-09-29
+==================
+
+ * deps: mime-types@~2.1.7
+ - deps: mime-db@~1.19.0
+ * deps: negotiator@0.6.0
+ - Fix including type extensions in parameters in `Accept` parsing
+ - Fix parsing `Accept` parameters with quoted equals
+ - Fix parsing `Accept` parameters with quoted semicolons
+ - Lazy-load modules from main entry point
+ - perf: delay type concatenation until needed
+ - perf: enable strict mode
+ - perf: hoist regular expressions
+ - perf: remove closures getting spec properties
+ - perf: remove a closure from media type parsing
+ - perf: remove property delete from media type parsing
+
+1.2.13 / 2015-09-06
+===================
+
+ * deps: mime-types@~2.1.6
+ - deps: mime-db@~1.18.0
+
+1.2.12 / 2015-07-30
+===================
+
+ * deps: mime-types@~2.1.4
+ - deps: mime-db@~1.16.0
+
+1.2.11 / 2015-07-16
+===================
+
+ * deps: mime-types@~2.1.3
+ - deps: mime-db@~1.15.0
+
+1.2.10 / 2015-07-01
+===================
+
+ * deps: mime-types@~2.1.2
+ - deps: mime-db@~1.14.0
+
+1.2.9 / 2015-06-08
+==================
+
+ * deps: mime-types@~2.1.1
+ - perf: fix deopt during mapping
+
+1.2.8 / 2015-06-07
+==================
+
+ * deps: mime-types@~2.1.0
+ - deps: mime-db@~1.13.0
+ * perf: avoid argument reassignment & argument slice
+ * perf: avoid negotiator recursive construction
+ * perf: enable strict mode
+ * perf: remove unnecessary bitwise operator
+
+1.2.7 / 2015-05-10
+==================
+
+ * deps: negotiator@0.5.3
+ - Fix media type parameter matching to be case-insensitive
+
+1.2.6 / 2015-05-07
+==================
+
+ * deps: mime-types@~2.0.11
+ - deps: mime-db@~1.9.1
+ * deps: negotiator@0.5.2
+ - Fix comparing media types with quoted values
+ - Fix splitting media types with quoted commas
+
+1.2.5 / 2015-03-13
+==================
+
+ * deps: mime-types@~2.0.10
+ - deps: mime-db@~1.8.0
+
+1.2.4 / 2015-02-14
+==================
+
+ * Support Node.js 0.6
+ * deps: mime-types@~2.0.9
+ - deps: mime-db@~1.7.0
+ * deps: negotiator@0.5.1
+ - Fix preference sorting to be stable for long acceptable lists
+
+1.2.3 / 2015-01-31
+==================
+
+ * deps: mime-types@~2.0.8
+ - deps: mime-db@~1.6.0
+
+1.2.2 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.7
+ - deps: mime-db@~1.5.0
+
+1.2.1 / 2014-12-30
+==================
+
+ * deps: mime-types@~2.0.5
+ - deps: mime-db@~1.3.1
+
+1.2.0 / 2014-12-19
+==================
+
+ * deps: negotiator@0.5.0
+ - Fix list return order when large accepted list
+ - Fix missing identity encoding when q=0 exists
+ - Remove dynamic building of Negotiator class
+
+1.1.4 / 2014-12-10
+==================
+
+ * deps: mime-types@~2.0.4
+ - deps: mime-db@~1.3.0
+
+1.1.3 / 2014-11-09
+==================
+
+ * deps: mime-types@~2.0.3
+ - deps: mime-db@~1.2.0
+
+1.1.2 / 2014-10-14
+==================
+
+ * deps: negotiator@0.4.9
+ - Fix error when media type has invalid parameter
+
+1.1.1 / 2014-09-28
+==================
+
+ * deps: mime-types@~2.0.2
+ - deps: mime-db@~1.1.0
+ * deps: negotiator@0.4.8
+ - Fix all negotiations to be case-insensitive
+ - Stable sort preferences of same quality according to client order
+
+1.1.0 / 2014-09-02
+==================
+
+ * update `mime-types`
+
+1.0.7 / 2014-07-04
+==================
+
+ * Fix wrong type returned from `type` when match after unknown extension
+
+1.0.6 / 2014-06-24
+==================
+
+ * deps: negotiator@0.4.7
+
+1.0.5 / 2014-06-20
+==================
+
+ * fix crash when unknown extension given
+
+1.0.4 / 2014-06-19
+==================
+
+ * use `mime-types`
+
+1.0.3 / 2014-06-11
+==================
+
+ * deps: negotiator@0.4.6
+ - Order by specificity when quality is the same
+
+1.0.2 / 2014-05-29
+==================
+
+ * Fix interpretation when header not in request
+ * deps: pin negotiator@0.4.5
+
+1.0.1 / 2014-01-18
+==================
+
+ * Identity encoding isn't always acceptable
+ * deps: negotiator@~0.4.0
+
+1.0.0 / 2013-12-27
+==================
+
+ * Genesis
diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE
new file mode 100644
index 0000000..0616607
--- /dev/null
+++ b/node_modules/accepts/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2015 Douglas Christopher Wilson
+
+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/node_modules/accepts/README.md b/node_modules/accepts/README.md
new file mode 100644
index 0000000..ae36676
--- /dev/null
+++ b/node_modules/accepts/README.md
@@ -0,0 +1,135 @@
+# accepts
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
+
+In addition to negotiator, it allows:
+
+- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` as well as `('text/html', 'application/json')`.
+- Allows type shorthands such as `json`.
+- Returns `false` when no types match
+- Treats non-existent headers as `*`
+
+## Installation
+
+```sh
+npm install accepts
+```
+
+## API
+
+```js
+var accepts = require('accepts')
+```
+
+### accepts(req)
+
+Create a new `Accepts` object for the given `req`.
+
+#### .charset(charsets)
+
+Return the first accepted charset. If nothing in `charsets` is accepted,
+then `false` is returned.
+
+#### .charsets()
+
+Return the charsets that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .encoding(encodings)
+
+Return the first accepted encoding. If nothing in `encodings` is accepted,
+then `false` is returned.
+
+#### .encodings()
+
+Return the encodings that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .language(languages)
+
+Return the first accepted language. If nothing in `languages` is accepted,
+then `false` is returned.
+
+#### .languages()
+
+Return the languages that the request accepts, in the order of the client's
+preference (most preferred first).
+
+#### .type(types)
+
+Return the first accepted type (and it is returned as the same text as what
+appears in the `types` array). If nothing in `types` is accepted, then `false`
+is returned.
+
+The `types` array can contain full MIME types or file extensions. Any value
+that is not a full MIME types is passed to `require('mime-types').lookup`.
+
+#### .types()
+
+Return the types that the request accepts, in the order of the client's
+preference (most preferred first).
+
+## Examples
+
+### Simple type negotiation
+
+This simple example shows how to use `accepts` to return a different typed
+respond body based on what the client wants to accept. The server lists it's
+preferences in order and will get back the best match between the client and
+server.
+
+```js
+var accepts = require('accepts')
+var http = require('http')
+
+function app(req, res) {
+ var accept = accepts(req)
+
+ // the order of this list is significant; should be server preferred order
+ switch(accept.type(['json', 'html'])) {
+ case 'json':
+ res.setHeader('Content-Type', 'application/json')
+ res.write('{"hello":"world!"}')
+ break
+ case 'html':
+ res.setHeader('Content-Type', 'text/html')
+ res.write('hello, world! ')
+ break
+ default:
+ // the fallback is text/plain, so no need to specify it above
+ res.setHeader('Content-Type', 'text/plain')
+ res.write('hello, world!')
+ break
+ }
+
+ res.end()
+}
+
+http.createServer(app).listen(3000)
+```
+
+You can test this out with the cURL program:
+```sh
+curl -I -H'Accept: text/html' http://localhost:3000/
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/accepts.svg
+[npm-url]: https://npmjs.org/package/accepts
+[node-version-image]: https://img.shields.io/node/v/accepts.svg
+[node-version-url]: http://nodejs.org/download/
+[travis-image]: https://img.shields.io/travis/jshttp/accepts/master.svg
+[travis-url]: https://travis-ci.org/jshttp/accepts
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/accepts/master.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/accepts
+[downloads-image]: https://img.shields.io/npm/dm/accepts.svg
+[downloads-url]: https://npmjs.org/package/accepts
diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js
new file mode 100644
index 0000000..e80192a
--- /dev/null
+++ b/node_modules/accepts/index.js
@@ -0,0 +1,231 @@
+/*!
+ * accepts
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var Negotiator = require('negotiator')
+var mime = require('mime-types')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = Accepts
+
+/**
+ * Create a new Accepts object for the given req.
+ *
+ * @param {object} req
+ * @public
+ */
+
+function Accepts(req) {
+ if (!(this instanceof Accepts))
+ return new Accepts(req)
+
+ this.headers = req.headers
+ this.negotiator = new Negotiator(req)
+}
+
+/**
+ * Check if the given `type(s)` is acceptable, returning
+ * the best match when true, otherwise `undefined`, in which
+ * case you should respond with 406 "Not Acceptable".
+ *
+ * The `type` value may be a single mime type string
+ * such as "application/json", the extension name
+ * such as "json" or an array `["json", "html", "text/plain"]`. When a list
+ * or array is given the _best_ match, if any is returned.
+ *
+ * Examples:
+ *
+ * // Accept: text/html
+ * this.types('html');
+ * // => "html"
+ *
+ * // Accept: text/*, application/json
+ * this.types('html');
+ * // => "html"
+ * this.types('text/html');
+ * // => "text/html"
+ * this.types('json', 'text');
+ * // => "json"
+ * this.types('application/json');
+ * // => "application/json"
+ *
+ * // Accept: text/*, application/json
+ * this.types('image/png');
+ * this.types('png');
+ * // => undefined
+ *
+ * // Accept: text/*;q=.5, application/json
+ * this.types(['html', 'json']);
+ * this.types('html', 'json');
+ * // => "json"
+ *
+ * @param {String|Array} types...
+ * @return {String|Array|Boolean}
+ * @public
+ */
+
+Accepts.prototype.type =
+Accepts.prototype.types = function (types_) {
+ var types = types_
+
+ // support flattened arguments
+ if (types && !Array.isArray(types)) {
+ types = new Array(arguments.length)
+ for (var i = 0; i < types.length; i++) {
+ types[i] = arguments[i]
+ }
+ }
+
+ // no types, return all requested types
+ if (!types || types.length === 0) {
+ return this.negotiator.mediaTypes()
+ }
+
+ if (!this.headers.accept) return types[0];
+ var mimes = types.map(extToMime);
+ var accepts = this.negotiator.mediaTypes(mimes.filter(validMime));
+ var first = accepts[0];
+ if (!first) return false;
+ return types[mimes.indexOf(first)];
+}
+
+/**
+ * Return accepted encodings or best fit based on `encodings`.
+ *
+ * Given `Accept-Encoding: gzip, deflate`
+ * an array sorted by quality is returned:
+ *
+ * ['gzip', 'deflate']
+ *
+ * @param {String|Array} encodings...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.encoding =
+Accepts.prototype.encodings = function (encodings_) {
+ var encodings = encodings_
+
+ // support flattened arguments
+ if (encodings && !Array.isArray(encodings)) {
+ encodings = new Array(arguments.length)
+ for (var i = 0; i < encodings.length; i++) {
+ encodings[i] = arguments[i]
+ }
+ }
+
+ // no encodings, return all requested encodings
+ if (!encodings || encodings.length === 0) {
+ return this.negotiator.encodings()
+ }
+
+ return this.negotiator.encodings(encodings)[0] || false
+}
+
+/**
+ * Return accepted charsets or best fit based on `charsets`.
+ *
+ * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
+ * an array sorted by quality is returned:
+ *
+ * ['utf-8', 'utf-7', 'iso-8859-1']
+ *
+ * @param {String|Array} charsets...
+ * @return {String|Array}
+ * @public
+ */
+
+Accepts.prototype.charset =
+Accepts.prototype.charsets = function (charsets_) {
+ var charsets = charsets_
+
+ // support flattened arguments
+ if (charsets && !Array.isArray(charsets)) {
+ charsets = new Array(arguments.length)
+ for (var i = 0; i < charsets.length; i++) {
+ charsets[i] = arguments[i]
+ }
+ }
+
+ // no charsets, return all requested charsets
+ if (!charsets || charsets.length === 0) {
+ return this.negotiator.charsets()
+ }
+
+ return this.negotiator.charsets(charsets)[0] || false
+}
+
+/**
+ * Return accepted languages or best fit based on `langs`.
+ *
+ * Given `Accept-Language: en;q=0.8, es, pt`
+ * an array sorted by quality is returned:
+ *
+ * ['es', 'pt', 'en']
+ *
+ * @param {String|Array} langs...
+ * @return {Array|String}
+ * @public
+ */
+
+Accepts.prototype.lang =
+Accepts.prototype.langs =
+Accepts.prototype.language =
+Accepts.prototype.languages = function (languages_) {
+ var languages = languages_
+
+ // support flattened arguments
+ if (languages && !Array.isArray(languages)) {
+ languages = new Array(arguments.length)
+ for (var i = 0; i < languages.length; i++) {
+ languages[i] = arguments[i]
+ }
+ }
+
+ // no languages, return all requested languages
+ if (!languages || languages.length === 0) {
+ return this.negotiator.languages()
+ }
+
+ return this.negotiator.languages(languages)[0] || false
+}
+
+/**
+ * Convert extnames to mime.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function extToMime(type) {
+ return type.indexOf('/') === -1
+ ? mime.lookup(type)
+ : type
+}
+
+/**
+ * Check if mime is valid.
+ *
+ * @param {String} type
+ * @return {String}
+ * @private
+ */
+
+function validMime(type) {
+ return typeof type === 'string';
+}
diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json
new file mode 100644
index 0000000..fe1c035
--- /dev/null
+++ b/node_modules/accepts/package.json
@@ -0,0 +1,112 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "accepts@~1.3.3",
+ "scope": null,
+ "escapedName": "accepts",
+ "name": "accepts",
+ "rawSpec": "~1.3.3",
+ "spec": ">=1.3.3 <1.4.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express"
+ ]
+ ],
+ "_from": "accepts@>=1.3.3 <1.4.0",
+ "_id": "accepts@1.3.3",
+ "_inCache": true,
+ "_location": "/accepts",
+ "_nodeVersion": "4.4.3",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/accepts-1.3.3.tgz_1462251932032_0.7092335098423064"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "2.15.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "accepts@~1.3.3",
+ "scope": null,
+ "escapedName": "accepts",
+ "name": "accepts",
+ "rawSpec": "~1.3.3",
+ "spec": ">=1.3.3 <1.4.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/express"
+ ],
+ "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+ "_shasum": "c3ca7434938648c3e0d9c1e328dd68b622c284ca",
+ "_shrinkwrap": null,
+ "_spec": "accepts@~1.3.3",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express",
+ "bugs": {
+ "url": "https://github.com/jshttp/accepts/issues"
+ },
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "dependencies": {
+ "mime-types": "~2.1.11",
+ "negotiator": "0.6.1"
+ },
+ "description": "Higher-level content negotiation",
+ "devDependencies": {
+ "istanbul": "0.4.3",
+ "mocha": "~1.21.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "c3ca7434938648c3e0d9c1e328dd68b622c284ca",
+ "tarball": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "index.js"
+ ],
+ "gitHead": "3e925b1e65ed7da2798849683d49814680dfa426",
+ "homepage": "https://github.com/jshttp/accepts#readme",
+ "keywords": [
+ "content",
+ "negotiation",
+ "accept",
+ "accepts"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "name": "accepts",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jshttp/accepts.git"
+ },
+ "scripts": {
+ "test": "mocha --reporter spec --check-leaks --bail test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ },
+ "version": "1.3.3"
+}
diff --git a/node_modules/acorn-globals/LICENSE b/node_modules/acorn-globals/LICENSE
new file mode 100644
index 0000000..27cc9f3
--- /dev/null
+++ b/node_modules/acorn-globals/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Forbes Lindesay
+
+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/node_modules/acorn-globals/README.md b/node_modules/acorn-globals/README.md
new file mode 100644
index 0000000..d8cd372
--- /dev/null
+++ b/node_modules/acorn-globals/README.md
@@ -0,0 +1,76 @@
+# acorn-globals
+
+Detect global variables in JavaScript using acorn
+
+[](https://travis-ci.org/ForbesLindesay/acorn-globals)
+[](https://david-dm.org/ForbesLindesay/acorn-globals)
+[](https://www.npmjs.org/package/acorn-globals)
+
+## Installation
+
+ npm install acorn-globals
+
+## Usage
+
+detect.js
+
+```js
+var fs = require('fs');
+var detect = require('acorn-globals');
+
+var src = fs.readFileSync(__dirname + '/input.js', 'utf8');
+
+var scope = detect(src);
+console.dir(scope);
+```
+
+input.js
+
+```js
+var x = 5;
+var y = 3, z = 2;
+
+w.foo();
+w = 2;
+
+RAWR=444;
+RAWR.foo();
+
+BLARG=3;
+
+foo(function () {
+ var BAR = 3;
+ process.nextTick(function (ZZZZZZZZZZZZ) {
+ console.log('beep boop');
+ var xyz = 4;
+ x += 10;
+ x.zzzzzz;
+ ZZZ=6;
+ });
+ function doom () {
+ }
+ ZZZ.foo();
+
+});
+
+console.log(xyz);
+```
+
+output:
+
+```
+$ node example/detect.js
+[ { name: 'BLARG', nodes: [ [Object] ] },
+ { name: 'RAWR', nodes: [ [Object], [Object] ] },
+ { name: 'ZZZ', nodes: [ [Object], [Object] ] },
+ { name: 'console', nodes: [ [Object], [Object] ] },
+ { name: 'foo', nodes: [ [Object] ] },
+ { name: 'process', nodes: [ [Object] ] },
+ { name: 'w', nodes: [ [Object], [Object] ] },
+ { name: 'xyz', nodes: [ [Object] ] } ]
+```
+
+
+## License
+
+ MIT
diff --git a/node_modules/acorn-globals/index.js b/node_modules/acorn-globals/index.js
new file mode 100644
index 0000000..ff924c9
--- /dev/null
+++ b/node_modules/acorn-globals/index.js
@@ -0,0 +1,180 @@
+'use strict';
+
+var acorn = require('acorn');
+var walk = require('acorn/dist/walk');
+
+function isScope(node) {
+ return node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration' || node.type === 'ArrowFunctionExpression' || node.type === 'Program';
+}
+function isBlockScope(node) {
+ return node.type === 'BlockStatement' || isScope(node);
+}
+
+function declaresArguments(node) {
+ return node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration';
+}
+
+function declaresThis(node) {
+ return node.type === 'FunctionExpression' || node.type === 'FunctionDeclaration';
+}
+
+function reallyParse(source) {
+ try {
+ return acorn.parse(source, {
+ ecmaVersion: 6,
+ allowReturnOutsideFunction: true,
+ allowImportExportEverywhere: true,
+ allowHashBang: true
+ });
+ } catch (ex) {
+ return acorn.parse(source, {
+ ecmaVersion: 5,
+ allowReturnOutsideFunction: true,
+ allowImportExportEverywhere: true,
+ allowHashBang: true
+ });
+ }
+}
+module.exports = findGlobals;
+module.exports.parse = reallyParse;
+function findGlobals(source) {
+ var globals = [];
+ var ast;
+ // istanbul ignore else
+ if (typeof source === 'string') {
+ ast = reallyParse(source);
+ } else {
+ ast = source;
+ }
+ // istanbul ignore if
+ if (!(ast && typeof ast === 'object' && ast.type === 'Program')) {
+ throw new TypeError('Source must be either a string of JavaScript or an acorn AST');
+ }
+ var declareFunction = function (node) {
+ var fn = node;
+ fn.locals = fn.locals || {};
+ node.params.forEach(function (node) {
+ declarePattern(node, fn);
+ });
+ if (node.id) {
+ fn.locals[node.id.name] = true;
+ }
+ }
+ var declarePattern = function (node, parent) {
+ switch (node.type) {
+ case 'Identifier':
+ parent.locals[node.name] = true;
+ break;
+ case 'ObjectPattern':
+ node.properties.forEach(function (node) {
+ declarePattern(node.value, parent);
+ });
+ break;
+ case 'ArrayPattern':
+ node.elements.forEach(function (node) {
+ if (node) declarePattern(node, parent);
+ });
+ break;
+ case 'RestElement':
+ declarePattern(node.argument, parent);
+ break;
+ case 'AssignmentPattern':
+ declarePattern(node.left, parent);
+ break;
+ // istanbul ignore next
+ default:
+ throw new Error('Unrecognized pattern type: ' + node.type);
+ }
+ }
+ var declareModuleSpecifier = function (node, parents) {
+ ast.locals = ast.locals || {};
+ ast.locals[node.local.name] = true;
+ }
+ walk.ancestor(ast, {
+ 'VariableDeclaration': function (node, parents) {
+ var parent = null;
+ for (var i = parents.length - 1; i >= 0 && parent === null; i--) {
+ if (node.kind === 'var' ? isScope(parents[i]) : isBlockScope(parents[i])) {
+ parent = parents[i];
+ }
+ }
+ parent.locals = parent.locals || {};
+ node.declarations.forEach(function (declaration) {
+ declarePattern(declaration.id, parent);
+ });
+ },
+ 'FunctionDeclaration': function (node, parents) {
+ var parent = null;
+ for (var i = parents.length - 2; i >= 0 && parent === null; i--) {
+ if (isScope(parents[i])) {
+ parent = parents[i];
+ }
+ }
+ parent.locals = parent.locals || {};
+ parent.locals[node.id.name] = true;
+ declareFunction(node);
+ },
+ 'Function': declareFunction,
+ 'ClassDeclaration': function (node, parents) {
+ var parent = null;
+ for (var i = parents.length - 2; i >= 0 && parent === null; i--) {
+ if (isScope(parents[i])) {
+ parent = parents[i];
+ }
+ }
+ parent.locals = parent.locals || {};
+ parent.locals[node.id.name] = true;
+ },
+ 'TryStatement': function (node) {
+ if (node.handler === null) return;
+ node.handler.body.locals = node.handler.body.locals || {};
+ node.handler.body.locals[node.handler.param.name] = true;
+ },
+ 'ImportDefaultSpecifier': declareModuleSpecifier,
+ 'ImportSpecifier': declareModuleSpecifier,
+ 'ImportNamespaceSpecifier': declareModuleSpecifier
+ });
+ function identifier(node, parents) {
+ var name = node.name;
+ if (name === 'undefined') return;
+ for (var i = 0; i < parents.length; i++) {
+ if (name === 'arguments' && declaresArguments(parents[i])) {
+ return;
+ }
+ if (parents[i].locals && name in parents[i].locals) {
+ return;
+ }
+ }
+ if (
+ parents[parents.length - 2] &&
+ parents[parents.length - 2].type === 'TryStatement' &&
+ parents[parents.length - 2].handler &&
+ node === parents[parents.length - 2].handler.param
+ ) {
+ return;
+ }
+ node.parents = parents;
+ globals.push(node);
+ }
+ walk.ancestor(ast, {
+ 'VariablePattern': identifier,
+ 'Identifier': identifier,
+ 'ThisExpression': function (node, parents) {
+ for (var i = 0; i < parents.length; i++) {
+ if (declaresThis(parents[i])) {
+ return;
+ }
+ }
+ node.parents = parents;
+ globals.push(node);
+ }
+ });
+ var groupedGlobals = {};
+ globals.forEach(function (node) {
+ groupedGlobals[node.name] = (groupedGlobals[node.name] || []);
+ groupedGlobals[node.name].push(node);
+ });
+ return Object.keys(groupedGlobals).sort().map(function (name) {
+ return {name: name, nodes: groupedGlobals[name]};
+ });
+}
diff --git a/node_modules/acorn-globals/package.json b/node_modules/acorn-globals/package.json
new file mode 100644
index 0000000..af0a80b
--- /dev/null
+++ b/node_modules/acorn-globals/package.json
@@ -0,0 +1,100 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "acorn-globals@^1.0.3",
+ "scope": null,
+ "escapedName": "acorn-globals",
+ "name": "acorn-globals",
+ "rawSpec": "^1.0.3",
+ "spec": ">=1.0.3 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/with"
+ ]
+ ],
+ "_from": "acorn-globals@>=1.0.3 <2.0.0",
+ "_id": "acorn-globals@1.0.9",
+ "_inCache": true,
+ "_location": "/acorn-globals",
+ "_nodeVersion": "1.6.2",
+ "_npmUser": {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ "_npmVersion": "2.7.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "acorn-globals@^1.0.3",
+ "scope": null,
+ "escapedName": "acorn-globals",
+ "name": "acorn-globals",
+ "rawSpec": "^1.0.3",
+ "spec": ">=1.0.3 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/with"
+ ],
+ "_resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
+ "_shasum": "55bb5e98691507b74579d0513413217c380c54cf",
+ "_shrinkwrap": null,
+ "_spec": "acorn-globals@^1.0.3",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/with",
+ "author": {
+ "name": "ForbesLindesay"
+ },
+ "bugs": {
+ "url": "https://github.com/ForbesLindesay/acorn-globals/issues"
+ },
+ "dependencies": {
+ "acorn": "^2.1.0"
+ },
+ "description": "Detect global variables in JavaScript using acorn",
+ "devDependencies": {
+ "testit": "^2.0.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "55bb5e98691507b74579d0513413217c380c54cf",
+ "tarball": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz"
+ },
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "gitHead": "808cab09764b63679138b012602ca1bb51657f97",
+ "homepage": "https://github.com/ForbesLindesay/acorn-globals",
+ "keywords": [
+ "ast",
+ "variable",
+ "name",
+ "lexical",
+ "scope",
+ "local",
+ "global",
+ "implicit"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ {
+ "name": "timothygu",
+ "email": "timothygu99@gmail.com"
+ }
+ ],
+ "name": "acorn-globals",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ForbesLindesay/acorn-globals.git"
+ },
+ "scripts": {
+ "test": "node test"
+ },
+ "version": "1.0.9"
+}
diff --git a/node_modules/acorn/.editorconfig b/node_modules/acorn/.editorconfig
new file mode 100644
index 0000000..c14d5c6
--- /dev/null
+++ b/node_modules/acorn/.editorconfig
@@ -0,0 +1,7 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
diff --git a/node_modules/acorn/.gitattributes b/node_modules/acorn/.gitattributes
new file mode 100644
index 0000000..fcadb2c
--- /dev/null
+++ b/node_modules/acorn/.gitattributes
@@ -0,0 +1 @@
+* text eol=lf
diff --git a/node_modules/acorn/.npmignore b/node_modules/acorn/.npmignore
new file mode 100644
index 0000000..ecba291
--- /dev/null
+++ b/node_modules/acorn/.npmignore
@@ -0,0 +1,3 @@
+/.tern-port
+/test
+/local
diff --git a/node_modules/acorn/.tern-project b/node_modules/acorn/.tern-project
new file mode 100644
index 0000000..6718ce0
--- /dev/null
+++ b/node_modules/acorn/.tern-project
@@ -0,0 +1,6 @@
+{
+ "plugins": {
+ "node": true,
+ "es_modules": true
+ }
+}
\ No newline at end of file
diff --git a/node_modules/acorn/.travis.yml b/node_modules/acorn/.travis.yml
new file mode 100644
index 0000000..f50c379
--- /dev/null
+++ b/node_modules/acorn/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+sudo: false
+node_js:
+ - '0.10'
+ - '0.12'
+ - '4'
diff --git a/node_modules/acorn/AUTHORS b/node_modules/acorn/AUTHORS
new file mode 100644
index 0000000..0e8f48b
--- /dev/null
+++ b/node_modules/acorn/AUTHORS
@@ -0,0 +1,43 @@
+List of Acorn contributors. Updated before every release.
+
+Adrian Rakovsky
+Alistair Braidwood
+Andres Suarez
+Aparajita Fishman
+Arian Stolwijk
+Artem Govorov
+Brandon Mills
+Charles Hughes
+Conrad Irwin
+David Bonnet
+ForbesLindesay
+Forbes Lindesay
+Gilad Peleg
+impinball
+Ingvar Stepanyan
+Jesse McCarthy
+Jiaxing Wang
+Joel Kemp
+Johannes Herr
+Jürg Lehni
+keeyipchan
+Kevin Kwok
+krator
+Marijn Haverbeke
+Martin Carlberg
+Mathias Bynens
+Mathieu 'p01' Henri
+Max Schaefer
+Max Zerzouri
+Mihai Bazon
+Mike Rennie
+Nick Fitzgerald
+Oskar Schöldström
+Paul Harper
+Peter Rust
+PlNG
+r-e-d
+Rich Harris
+Sebastian McKenzie
+Timothy Gu
+zsjforcn
diff --git a/node_modules/acorn/LICENSE b/node_modules/acorn/LICENSE
new file mode 100644
index 0000000..d4c7fc5
--- /dev/null
+++ b/node_modules/acorn/LICENSE
@@ -0,0 +1,19 @@
+Copyright (C) 2012-2014 by various contributors (see AUTHORS)
+
+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/node_modules/acorn/README.md b/node_modules/acorn/README.md
new file mode 100644
index 0000000..acd39a8
--- /dev/null
+++ b/node_modules/acorn/README.md
@@ -0,0 +1,396 @@
+# Acorn
+
+[](https://travis-ci.org/ternjs/acorn)
+[](https://www.npmjs.com/package/acorn)
+[Author funding status: ](https://marijnhaverbeke.nl/fund/)
+
+A tiny, fast JavaScript parser, written completely in JavaScript.
+
+## Community
+
+Acorn is open source software released under an
+[MIT license](https://github.com/ternjs/acorn/blob/master/LICENSE).
+
+You are welcome to
+[report bugs](https://github.com/ternjs/acorn/issues) or create pull
+requests on [github](https://github.com/ternjs/acorn). For questions
+and discussion, please use the
+[Tern discussion forum](https://discuss.ternjs.net).
+
+## Installation
+
+The easiest way to install acorn is with [`npm`][npm].
+
+[npm]: https://www.npmjs.com/
+
+```sh
+npm install acorn
+```
+
+Alternately, download the source.
+
+```sh
+git clone https://github.com/ternjs/acorn.git
+```
+
+## Components
+
+When run in a CommonJS (node.js) or AMD environment, exported values
+appear in the interfaces exposed by the individual files, as usual.
+When loaded in the browser (Acorn works in any JS-enabled browser more
+recent than IE5) without any kind of module management, a single
+global object `acorn` will be defined, and all the exported properties
+will be added to that.
+
+### Main parser
+
+This is implemented in `dist/acorn.js`, and is what you get when you
+`require("acorn")` in node.js.
+
+**parse**`(input, options)` is used to parse a JavaScript program.
+The `input` parameter is a string, `options` can be undefined or an
+object setting some of the options listed below. The return value will
+be an abstract syntax tree object as specified by the
+[ESTree spec][estree].
+
+When encountering a syntax error, the parser will raise a
+`SyntaxError` object with a meaningful message. The error object will
+have a `pos` property that indicates the character offset at which the
+error occurred, and a `loc` object that contains a `{line, column}`
+object referring to that same position.
+
+[estree]: https://github.com/estree/estree
+
+- **ecmaVersion**: Indicates the ECMAScript version to parse. Must be
+ either 3, 5, or 6. This influences support for strict mode, the set
+ of reserved words, and support for new syntax features. Default is 5.
+
+- **sourceType**: Indicate the mode the code should be parsed in. Can be
+ either `"script"` or `"module"`.
+
+- **onInsertedSemicolon**: If given a callback, that callback will be
+ called whenever a missing semicolon is inserted by the parser. The
+ callback will be given the character offset of the point where the
+ semicolon is inserted as argument, and if `locations` is on, also a
+ `{line, column}` object representing this position.
+
+- **onTrailingComma**: Like `onInsertedSemicolon`, but for trailing
+ commas.
+
+- **allowReserved**: If `false`, using a reserved word will generate
+ an error. Defaults to `true` for `ecmaVersion` 3, `false` for higher
+ versions. When given the value `"never"`, reserved words and
+ keywords can also not be used as property names (as in Internet
+ Explorer's old parser).
+
+- **allowReturnOutsideFunction**: By default, a return statement at
+ the top level raises an error. Set this to `true` to accept such
+ code.
+
+- **allowImportExportEverywhere**: By default, `import` and `export`
+ declarations can only appear at a program's top level. Setting this
+ option to `true` allows them anywhere where a statement is allowed.
+
+- **allowHashBang**: When this is enabled (off by default), if the
+ code starts with the characters `#!` (as in a shellscript), the
+ first line will be treated as a comment.
+
+- **locations**: When `true`, each node has a `loc` object attached
+ with `start` and `end` subobjects, each of which contains the
+ one-based line and zero-based column numbers in `{line, column}`
+ form. Default is `false`.
+
+- **onToken**: If a function is passed for this option, each found
+ token will be passed in same format as tokens returned from
+ `tokenizer().getToken()`.
+
+ If array is passed, each found token is pushed to it.
+
+ Note that you are not allowed to call the parser from the
+ callback—that will corrupt its internal state.
+
+- **onComment**: If a function is passed for this option, whenever a
+ comment is encountered the function will be called with the
+ following parameters:
+
+ - `block`: `true` if the comment is a block comment, false if it
+ is a line comment.
+ - `text`: The content of the comment.
+ - `start`: Character offset of the start of the comment.
+ - `end`: Character offset of the end of the comment.
+
+ When the `locations` options is on, the `{line, column}` locations
+ of the comment’s start and end are passed as two additional
+ parameters.
+
+ If array is passed for this option, each found comment is pushed
+ to it as object in Esprima format:
+
+ ```javascript
+ {
+ "type": "Line" | "Block",
+ "value": "comment text",
+ "start": Number,
+ "end": Number,
+ // If `locations` option is on:
+ "loc": {
+ "start": {line: Number, column: Number}
+ "end": {line: Number, column: Number}
+ },
+ // If `ranges` option is on:
+ "range": [Number, Number]
+ }
+ ```
+
+ Note that you are not allowed to call the parser from the
+ callback—that will corrupt its internal state.
+
+- **ranges**: Nodes have their start and end characters offsets
+ recorded in `start` and `end` properties (directly on the node,
+ rather than the `loc` object, which holds line/column data. To also
+ add a [semi-standardized][range] `range` property holding a
+ `[start, end]` array with the same numbers, set the `ranges` option
+ to `true`.
+
+- **program**: It is possible to parse multiple files into a single
+ AST by passing the tree produced by parsing the first file as the
+ `program` option in subsequent parses. This will add the toplevel
+ forms of the parsed file to the "Program" (top) node of an existing
+ parse tree.
+
+- **sourceFile**: When the `locations` option is `true`, you can pass
+ this option to add a `source` attribute in every node’s `loc`
+ object. Note that the contents of this option are not examined or
+ processed in any way; you are free to use whatever format you
+ choose.
+
+- **directSourceFile**: Like `sourceFile`, but a `sourceFile` property
+ will be added directly to the nodes, rather than the `loc` object.
+
+- **preserveParens**: If this option is `true`, parenthesized expressions
+ are represented by (non-standard) `ParenthesizedExpression` nodes
+ that have a single `expression` property containing the expression
+ inside parentheses.
+
+[range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
+
+**parseExpressionAt**`(input, offset, options)` will parse a single
+expression in a string, and return its AST. It will not complain if
+there is more of the string left after the expression.
+
+**getLineInfo**`(input, offset)` can be used to get a `{line,
+column}` object for a given program string and character offset.
+
+**tokenizer**`(input, options)` returns an object with a `getToken`
+method that can be called repeatedly to get the next token, a `{start,
+end, type, value}` object (with added `loc` property when the
+`locations` option is enabled and `range` property when the `ranges`
+option is enabled). When the token's type is `tokTypes.eof`, you
+should stop calling the method, since it will keep returning that same
+token forever.
+
+In ES6 environment, returned result can be used as any other
+protocol-compliant iterable:
+
+```javascript
+for (let token of acorn.tokenizer(str)) {
+ // iterate over the tokens
+}
+
+// transform code to array of tokens:
+var tokens = [...acorn.tokenizer(str)];
+```
+
+**tokTypes** holds an object mapping names to the token type objects
+that end up in the `type` properties of tokens.
+
+#### Note on using with [Escodegen][escodegen]
+
+Escodegen supports generating comments from AST, attached in
+Esprima-specific format. In order to simulate same format in
+Acorn, consider following example:
+
+```javascript
+var comments = [], tokens = [];
+
+var ast = acorn.parse('var x = 42; // answer', {
+ // collect ranges for each node
+ ranges: true,
+ // collect comments in Esprima's format
+ onComment: comments,
+ // collect token ranges
+ onToken: tokens
+});
+
+// attach comments using collected information
+escodegen.attachComments(ast, comments, tokens);
+
+// generate code
+console.log(escodegen.generate(ast, {comment: true}));
+// > 'var x = 42; // answer'
+```
+
+[escodegen]: https://github.com/estools/escodegen
+
+### dist/acorn_loose.js ###
+
+This file implements an error-tolerant parser. It exposes a single
+function. The loose parser is accessible in node.js via `require("acorn/dist/acorn_loose")`.
+
+**parse_dammit**`(input, options)` takes the same arguments and
+returns the same syntax tree as the `parse` function in `acorn.js`,
+but never raises an error, and will do its best to parse syntactically
+invalid code in as meaningful a way as it can. It'll insert identifier
+nodes with name `"✖"` as placeholders in places where it can't make
+sense of the input. Depends on `acorn.js`, because it uses the same
+tokenizer.
+
+### dist/walk.js ###
+
+Implements an abstract syntax tree walker. Will store its interface in
+`acorn.walk` when loaded without a module system.
+
+**simple**`(node, visitors, base, state)` does a 'simple' walk over
+a tree. `node` should be the AST node to walk, and `visitors` an
+object with properties whose names correspond to node types in the
+[ESTree spec][estree]. The properties should contain functions
+that will be called with the node object and, if applicable the state
+at that point. The last two arguments are optional. `base` is a walker
+algorithm, and `state` is a start state. The default walker will
+simply visit all statements and expressions and not produce a
+meaningful state. (An example of a use of state is to track scope at
+each point in the tree.)
+
+**ancestor**`(node, visitors, base, state)` does a 'simple' walk over
+a tree, building up an array of ancestor nodes (including the current node)
+and passing the array to callbacks in the `state` parameter.
+
+**recursive**`(node, state, functions, base)` does a 'recursive'
+walk, where the walker functions are responsible for continuing the
+walk on the child nodes of their target node. `state` is the start
+state, and `functions` should contain an object that maps node types
+to walker functions. Such functions are called with `(node, state, c)`
+arguments, and can cause the walk to continue on a sub-node by calling
+the `c` argument on it with `(node, state)` arguments. The optional
+`base` argument provides the fallback walker functions for node types
+that aren't handled in the `functions` object. If not given, the
+default walkers will be used.
+
+**make**`(functions, base)` builds a new walker object by using the
+walker functions in `functions` and filling in the missing ones by
+taking defaults from `base`.
+
+**findNodeAt**`(node, start, end, test, base, state)` tries to
+locate a node in a tree at the given start and/or end offsets, which
+satisfies the predicate `test`. `start` and `end` can be either `null`
+(as wildcard) or a number. `test` may be a string (indicating a node
+type) or a function that takes `(nodeType, node)` arguments and
+returns a boolean indicating whether this node is interesting. `base`
+and `state` are optional, and can be used to specify a custom walker.
+Nodes are tested from inner to outer, so if two nodes match the
+boundaries, the inner one will be preferred.
+
+**findNodeAround**`(node, pos, test, base, state)` is a lot like
+`findNodeAt`, but will match any node that exists 'around' (spanning)
+the given position.
+
+**findNodeAfter**`(node, pos, test, base, state)` is similar to
+`findNodeAround`, but will match all nodes *after* the given position
+(testing outer nodes before inner nodes).
+
+## Command line interface
+
+The `bin/acorn` utility can be used to parse a file from the command
+line. It accepts as arguments its input file and the following
+options:
+
+- `--ecma3|--ecma5|--ecma6`: Sets the ECMAScript version to parse. Default is
+ version 5.
+
+- `--module`: Sets the parsing mode to `"module"`. Is set to `"script"` otherwise.
+
+- `--locations`: Attaches a "loc" object to each node with "start" and
+ "end" subobjects, each of which contains the one-based line and
+ zero-based column numbers in `{line, column}` form.
+
+- `--allow-hash-bang`: If the code starts with the characters #! (as in a shellscript), the first line will be treated as a comment.
+
+- `--compact`: No whitespace is used in the AST output.
+
+- `--silent`: Do not output the AST, just return the exit status.
+
+- `--help`: Print the usage information and quit.
+
+The utility spits out the syntax tree as JSON data.
+
+## Build system
+
+Acorn is written in ECMAScript 6, as a set of small modules, in the
+project's `src` directory, and compiled down to bigger ECMAScript 3
+files in `dist` using [Browserify](http://browserify.org) and
+[Babel](http://babeljs.io/). If you are already using Babel, you can
+consider including the modules directly.
+
+The command-line test runner (`npm test`) uses the ES6 modules. The
+browser-based test page (`test/index.html`) uses the compiled modules.
+The `bin/build-acorn.js` script builds the latter from the former.
+
+If you are working on Acorn, you'll probably want to try the code out
+directly, without an intermediate build step. In your scripts, you can
+register the Babel require shim like this:
+
+ require("babel-core/register")
+
+That will allow you to directly `require` the ES6 modules.
+
+## Plugins
+
+Acorn is designed support allow plugins which, within reasonable
+bounds, redefine the way the parser works. Plugins can add new token
+types and new tokenizer contexts (if necessary), and extend methods in
+the parser object. This is not a clean, elegant API—using it requires
+an understanding of Acorn's internals, and plugins are likely to break
+whenever those internals are significantly changed. But still, it is
+_possible_, in this way, to create parsers for JavaScript dialects
+without forking all of Acorn. And in principle it is even possible to
+combine such plugins, so that if you have, for example, a plugin for
+parsing types and a plugin for parsing JSX-style XML literals, you
+could load them both and parse code with both JSX tags and types.
+
+A plugin should register itself by adding a property to
+`acorn.plugins`, which holds a function. Calling `acorn.parse`, a
+`plugins` option can be passed, holding an object mapping plugin names
+to configuration values (or just `true` for plugins that don't take
+options). After the parser object has been created, the initialization
+functions for the chosen plugins are called with `(parser,
+configValue)` arguments. They are expected to use the `parser.extend`
+method to extend parser methods. For example, the `readToken` method
+could be extended like this:
+
+```javascript
+parser.extend("readToken", function(nextMethod) {
+ return function(code) {
+ console.log("Reading a token!")
+ return nextMethod.call(this, code)
+ }
+})
+```
+
+The `nextMethod` argument passed to `extend`'s second argument is the
+previous value of this method, and should usually be called through to
+whenever the extended method does not handle the call itself.
+
+Similarly, the loose parser allows plugins to register themselves via
+`acorn.pluginsLoose`. The extension mechanism is the same as for the
+normal parser:
+
+```javascript
+looseParser.extend("readToken", function(nextMethod) {
+ return function() {
+ console.log("Reading a token in the loose parser!")
+ return nextMethod.call(this)
+ }
+})
+```
+
+There is a proof-of-concept JSX plugin in the [`acorn-jsx`](https://github.com/RReverser/acorn-jsx) project.
diff --git a/node_modules/acorn/bin/acorn b/node_modules/acorn/bin/acorn
new file mode 100755
index 0000000..db07909
--- /dev/null
+++ b/node_modules/acorn/bin/acorn
@@ -0,0 +1,71 @@
+#!/usr/bin/env node
+"use strict";
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }
+
+var _path = require("path");
+
+var _fs = require("fs");
+
+var _distAcornJs = require("../dist/acorn.js");
+
+var acorn = _interopRequireWildcard(_distAcornJs);
+
+var infile = undefined,
+ forceFile = undefined,
+ silent = false,
+ compact = false,
+ tokenize = false;
+var options = {};
+
+function help(status) {
+ var print = status == 0 ? console.log : console.error;
+ print("usage: " + (0, _path.basename)(process.argv[1]) + " [--ecma3|--ecma5|--ecma6]");
+ print(" [--tokenize] [--locations] [---allow-hash-bang] [--compact] [--silent] [--module] [--help] [--] [infile]");
+ process.exit(status);
+}
+
+for (var i = 2; i < process.argv.length; ++i) {
+ var arg = process.argv[i];
+ if ((arg == "-" || arg[0] != "-") && !infile) infile = arg;else if (arg == "--" && !infile && i + 2 == process.argv.length) forceFile = infile = process.argv[++i];else if (arg == "--ecma3") options.ecmaVersion = 3;else if (arg == "--ecma5") options.ecmaVersion = 5;else if (arg == "--ecma6") options.ecmaVersion = 6;else if (arg == "--locations") options.locations = true;else if (arg == "--allow-hash-bang") options.allowHashBang = true;else if (arg == "--silent") silent = true;else if (arg == "--compact") compact = true;else if (arg == "--help") help(0);else if (arg == "--tokenize") tokenize = true;else if (arg == "--module") options.sourceType = 'module';else help(1);
+}
+
+function run(code) {
+ var result = undefined;
+ if (!tokenize) {
+ try {
+ result = acorn.parse(code, options);
+ } catch (e) {
+ console.error(e.message);process.exit(1);
+ }
+ } else {
+ result = [];
+ var tokenizer = acorn.tokenizer(code, options),
+ token = undefined;
+ while (true) {
+ try {
+ token = tokenizer.getToken();
+ } catch (e) {
+ console.error(e.message);process.exit(1);
+ }
+ result.push(token);
+ if (token.type == acorn.tokTypes.eof) break;
+ }
+ }
+ if (!silent) console.log(JSON.stringify(result, null, compact ? null : 2));
+}
+
+if (forceFile || infile && infile != "-") {
+ run((0, _fs.readFileSync)(infile, "utf8"));
+} else {
+ (function () {
+ var code = "";
+ process.stdin.resume();
+ process.stdin.on("data", function (chunk) {
+ return code += chunk;
+ });
+ process.stdin.on("end", function () {
+ return run(code);
+ });
+ })();
+}
\ No newline at end of file
diff --git a/node_modules/acorn/bin/build-acorn.js b/node_modules/acorn/bin/build-acorn.js
new file mode 100644
index 0000000..71f2cf9
--- /dev/null
+++ b/node_modules/acorn/bin/build-acorn.js
@@ -0,0 +1,82 @@
+var fs = require("fs"), path = require("path")
+var stream = require("stream")
+
+var browserify = require("browserify")
+var babel = require('babel-core')
+var babelify = require("babelify").configure({loose: "all"})
+
+process.chdir(path.resolve(__dirname, ".."))
+
+browserify({standalone: "acorn"})
+ .plugin(require('browserify-derequire'))
+ .transform(babelify)
+ .require("./src/index.js", {entry: true})
+ .bundle()
+ .on("error", function (err) { console.log("Error: " + err.message) })
+ .pipe(fs.createWriteStream("dist/acorn.js"))
+
+var ACORN_PLACEHOLDER = "this_function_call_should_be_replaced_with_a_call_to_load_acorn()";
+function acornShimPrepare(file) {
+ var tr = new stream.Transform
+ if (file == path.resolve(__dirname, "../src/index.js")) {
+ var sent = false
+ tr._transform = function(chunk, _, callback) {
+ if (!sent) {
+ sent = true
+ callback(null, ACORN_PLACEHOLDER);
+ } else {
+ callback()
+ }
+ }
+ } else {
+ tr._transform = function(chunk, _, callback) { callback(null, chunk) }
+ }
+ return tr
+}
+function acornShimComplete() {
+ var tr = new stream.Transform
+ var buffer = "";
+ tr._transform = function(chunk, _, callback) {
+ buffer += chunk.toString("utf8");
+ callback();
+ };
+ tr._flush = function (callback) {
+ tr.push(buffer.replace(ACORN_PLACEHOLDER, "module.exports = typeof acorn != 'undefined' ? acorn : require(\"./acorn\")"));
+ callback(null);
+ };
+ return tr;
+}
+
+browserify({standalone: "acorn.loose"})
+ .plugin(require('browserify-derequire'))
+ .transform(acornShimPrepare)
+ .transform(babelify)
+ .require("./src/loose/index.js", {entry: true})
+ .bundle()
+ .on("error", function (err) { console.log("Error: " + err.message) })
+ .pipe(acornShimComplete())
+ .pipe(fs.createWriteStream("dist/acorn_loose.js"))
+
+browserify({standalone: "acorn.walk"})
+ .plugin(require('browserify-derequire'))
+ .transform(acornShimPrepare)
+ .transform(babelify)
+ .require("./src/walk/index.js", {entry: true})
+ .bundle()
+ .on("error", function (err) { console.log("Error: " + err.message) })
+ .pipe(acornShimComplete())
+ .pipe(fs.createWriteStream("dist/walk.js"))
+
+babel.transformFile("./src/bin/acorn.js", function (err, result) {
+ if (err) return console.log("Error: " + err.message)
+ fs.writeFile("bin/acorn", result.code, function (err) {
+ if (err) return console.log("Error: " + err.message)
+
+ // Make bin/acorn executable
+ if (process.platform === 'win32')
+ return
+ var stat = fs.statSync("bin/acorn")
+ var newPerm = stat.mode | parseInt('111', 8)
+ fs.chmodSync("bin/acorn", newPerm)
+ })
+})
diff --git a/node_modules/acorn/bin/generate-identifier-regex.js b/node_modules/acorn/bin/generate-identifier-regex.js
new file mode 100644
index 0000000..0d7c50f
--- /dev/null
+++ b/node_modules/acorn/bin/generate-identifier-regex.js
@@ -0,0 +1,47 @@
+// Note: run `npm install unicode-7.0.0` first.
+
+// Which Unicode version should be used?
+var version = '7.0.0';
+
+var start = require('unicode-' + version + '/properties/ID_Start/code-points')
+ .filter(function(ch) { return ch > 127; });
+var cont = [0x200c, 0x200d].concat(require('unicode-' + version + '/properties/ID_Continue/code-points')
+ .filter(function(ch) { return ch > 127 && start.indexOf(ch) == -1; }));
+
+function pad(str, width) {
+ while (str.length < width) str = "0" + str;
+ return str;
+}
+
+function esc(code) {
+ var hex = code.toString(16);
+ if (hex.length <= 2) return "\\x" + pad(hex, 2);
+ else return "\\u" + pad(hex, 4);
+}
+
+function generate(chars) {
+ var astral = [], re = "";
+ for (var i = 0, at = 0x10000; i < chars.length; i++) {
+ var from = chars[i], to = from;
+ while (i < chars.length - 1 && chars[i + 1] == to + 1) {
+ i++;
+ to++;
+ }
+ if (to <= 0xffff) {
+ if (from == to) re += esc(from);
+ else if (from + 1 == to) re += esc(from) + esc(to);
+ else re += esc(from) + "-" + esc(to);
+ } else {
+ astral.push(from - at, to - from);
+ at = to;
+ }
+ }
+ return {nonASCII: re, astral: astral};
+}
+
+var startData = generate(start), contData = generate(cont);
+
+console.log(" var nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\";");
+console.log(" var nonASCIIidentifierChars = \"" + contData.nonASCII + "\";");
+console.log(" var astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";");
+console.log(" var astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";");
diff --git a/node_modules/acorn/bin/update_authors.sh b/node_modules/acorn/bin/update_authors.sh
new file mode 100755
index 0000000..466c8db
--- /dev/null
+++ b/node_modules/acorn/bin/update_authors.sh
@@ -0,0 +1,6 @@
+# Combine existing list of authors with everyone known in git, sort, add header.
+tail --lines=+3 AUTHORS > AUTHORS.tmp
+git log --format='%aN' | grep -v abraidwood >> AUTHORS.tmp
+echo -e "List of Acorn contributors. Updated before every release.\n" > AUTHORS
+sort -u AUTHORS.tmp >> AUTHORS
+rm -f AUTHORS.tmp
diff --git a/node_modules/acorn/dist/.keep b/node_modules/acorn/dist/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/acorn/dist/acorn.js b/node_modules/acorn/dist/acorn.js
new file mode 100644
index 0000000..9419f86
--- /dev/null
+++ b/node_modules/acorn/dist/acorn.js
@@ -0,0 +1,3340 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.acorn = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 6 && (prop.computed || prop.method || prop.shorthand)) return;
+ var key = prop.key;var name = undefined;
+ switch (key.type) {
+ case "Identifier":
+ name = key.name;break;
+ case "Literal":
+ name = String(key.value);break;
+ default:
+ return;
+ }
+ var kind = prop.kind;
+
+ if (this.options.ecmaVersion >= 6) {
+ if (name === "__proto__" && kind === "init") {
+ if (propHash.proto) this.raise(key.start, "Redefinition of __proto__ property");
+ propHash.proto = true;
+ }
+ return;
+ }
+ name = "$" + name;
+ var other = propHash[name];
+ if (other) {
+ var isGetSet = kind !== "init";
+ if ((this.strict || isGetSet) && other[kind] || !(isGetSet ^ other.init)) this.raise(key.start, "Redefinition of property");
+ } else {
+ other = propHash[name] = {
+ init: false,
+ get: false,
+ set: false
+ };
+ }
+ other[kind] = true;
+};
+
+// ### Expression parsing
+
+// These nest, from the most general expression type at the top to
+// 'atomic', nondivisible expression types at the bottom. Most of
+// the functions will simply let the function(s) below them parse,
+// and, *if* the syntactic construct they handle is present, wrap
+// the AST node that the inner parser gave them in another node.
+
+// Parse a full expression. The optional arguments are used to
+// forbid the `in` operator (in for loops initalization expressions)
+// and provide reference for storing '=' operator inside shorthand
+// property assignment in contexts where both object expression
+// and object pattern might appear (so it's possible to raise
+// delayed syntax error at correct position).
+
+pp.parseExpression = function (noIn, refDestructuringErrors) {
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var expr = this.parseMaybeAssign(noIn, refDestructuringErrors);
+ if (this.type === _tokentype.types.comma) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.expressions = [expr];
+ while (this.eat(_tokentype.types.comma)) node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors));
+ return this.finishNode(node, "SequenceExpression");
+ }
+ return expr;
+};
+
+// Parse an assignment expression. This includes applications of
+// operators like `+=`.
+
+pp.parseMaybeAssign = function (noIn, refDestructuringErrors, afterLeftParse) {
+ if (this.type == _tokentype.types._yield && this.inGenerator) return this.parseYield();
+
+ var validateDestructuring = false;
+ if (!refDestructuringErrors) {
+ refDestructuringErrors = { shorthandAssign: 0, trailingComma: 0 };
+ validateDestructuring = true;
+ }
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ if (this.type == _tokentype.types.parenL || this.type == _tokentype.types.name) this.potentialArrowAt = this.start;
+ var left = this.parseMaybeConditional(noIn, refDestructuringErrors);
+ if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc);
+ if (this.type.isAssign) {
+ if (validateDestructuring) this.checkPatternErrors(refDestructuringErrors, true);
+ var node = this.startNodeAt(startPos, startLoc);
+ node.operator = this.value;
+ node.left = this.type === _tokentype.types.eq ? this.toAssignable(left) : left;
+ refDestructuringErrors.shorthandAssign = 0; // reset because shorthand default was used correctly
+ this.checkLVal(left);
+ this.next();
+ node.right = this.parseMaybeAssign(noIn);
+ return this.finishNode(node, "AssignmentExpression");
+ } else {
+ if (validateDestructuring) this.checkExpressionErrors(refDestructuringErrors, true);
+ }
+ return left;
+};
+
+// Parse a ternary conditional (`?:`) operator.
+
+pp.parseMaybeConditional = function (noIn, refDestructuringErrors) {
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var expr = this.parseExprOps(noIn, refDestructuringErrors);
+ if (this.checkExpressionErrors(refDestructuringErrors)) return expr;
+ if (this.eat(_tokentype.types.question)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.test = expr;
+ node.consequent = this.parseMaybeAssign();
+ this.expect(_tokentype.types.colon);
+ node.alternate = this.parseMaybeAssign(noIn);
+ return this.finishNode(node, "ConditionalExpression");
+ }
+ return expr;
+};
+
+// Start the precedence parser.
+
+pp.parseExprOps = function (noIn, refDestructuringErrors) {
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var expr = this.parseMaybeUnary(refDestructuringErrors);
+ if (this.checkExpressionErrors(refDestructuringErrors)) return expr;
+ return this.parseExprOp(expr, startPos, startLoc, -1, noIn);
+};
+
+// Parse binary operators with the operator precedence parsing
+// algorithm. `left` is the left-hand side of the operator.
+// `minPrec` provides context that allows the function to stop and
+// defer further parser to one of its callers when it encounters an
+// operator that has a lower precedence than the set it is parsing.
+
+pp.parseExprOp = function (left, leftStartPos, leftStartLoc, minPrec, noIn) {
+ var prec = this.type.binop;
+ if (prec != null && (!noIn || this.type !== _tokentype.types._in)) {
+ if (prec > minPrec) {
+ var node = this.startNodeAt(leftStartPos, leftStartLoc);
+ node.left = left;
+ node.operator = this.value;
+ var op = this.type;
+ this.next();
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ node.right = this.parseExprOp(this.parseMaybeUnary(), startPos, startLoc, prec, noIn);
+ this.finishNode(node, op === _tokentype.types.logicalOR || op === _tokentype.types.logicalAND ? "LogicalExpression" : "BinaryExpression");
+ return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn);
+ }
+ }
+ return left;
+};
+
+// Parse unary operators, both prefix and postfix.
+
+pp.parseMaybeUnary = function (refDestructuringErrors) {
+ if (this.type.prefix) {
+ var node = this.startNode(),
+ update = this.type === _tokentype.types.incDec;
+ node.operator = this.value;
+ node.prefix = true;
+ this.next();
+ node.argument = this.parseMaybeUnary();
+ this.checkExpressionErrors(refDestructuringErrors, true);
+ if (update) this.checkLVal(node.argument);else if (this.strict && node.operator === "delete" && node.argument.type === "Identifier") this.raise(node.start, "Deleting local variable in strict mode");
+ return this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
+ }
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var expr = this.parseExprSubscripts(refDestructuringErrors);
+ if (this.checkExpressionErrors(refDestructuringErrors)) return expr;
+ while (this.type.postfix && !this.canInsertSemicolon()) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.operator = this.value;
+ node.prefix = false;
+ node.argument = expr;
+ this.checkLVal(expr);
+ this.next();
+ expr = this.finishNode(node, "UpdateExpression");
+ }
+ return expr;
+};
+
+// Parse call, dot, and `[]`-subscript expressions.
+
+pp.parseExprSubscripts = function (refDestructuringErrors) {
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var expr = this.parseExprAtom(refDestructuringErrors);
+ var skipArrowSubscripts = expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")";
+ if (this.checkExpressionErrors(refDestructuringErrors) || skipArrowSubscripts) return expr;
+ return this.parseSubscripts(expr, startPos, startLoc);
+};
+
+pp.parseSubscripts = function (base, startPos, startLoc, noCalls) {
+ for (;;) {
+ if (this.eat(_tokentype.types.dot)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.property = this.parseIdent(true);
+ node.computed = false;
+ base = this.finishNode(node, "MemberExpression");
+ } else if (this.eat(_tokentype.types.bracketL)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.object = base;
+ node.property = this.parseExpression();
+ node.computed = true;
+ this.expect(_tokentype.types.bracketR);
+ base = this.finishNode(node, "MemberExpression");
+ } else if (!noCalls && this.eat(_tokentype.types.parenL)) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.callee = base;
+ node.arguments = this.parseExprList(_tokentype.types.parenR, false);
+ base = this.finishNode(node, "CallExpression");
+ } else if (this.type === _tokentype.types.backQuote) {
+ var node = this.startNodeAt(startPos, startLoc);
+ node.tag = base;
+ node.quasi = this.parseTemplate();
+ base = this.finishNode(node, "TaggedTemplateExpression");
+ } else {
+ return base;
+ }
+ }
+};
+
+// Parse an atomic expression — either a single token that is an
+// expression, an expression started by a keyword like `function` or
+// `new`, or an expression wrapped in punctuation like `()`, `[]`,
+// or `{}`.
+
+pp.parseExprAtom = function (refDestructuringErrors) {
+ var node = undefined,
+ canBeArrow = this.potentialArrowAt == this.start;
+ switch (this.type) {
+ case _tokentype.types._super:
+ if (!this.inFunction) this.raise(this.start, "'super' outside of function or class");
+ case _tokentype.types._this:
+ var type = this.type === _tokentype.types._this ? "ThisExpression" : "Super";
+ node = this.startNode();
+ this.next();
+ return this.finishNode(node, type);
+
+ case _tokentype.types._yield:
+ if (this.inGenerator) this.unexpected();
+
+ case _tokentype.types.name:
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ var id = this.parseIdent(this.type !== _tokentype.types.name);
+ if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokentype.types.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id]);
+ return id;
+
+ case _tokentype.types.regexp:
+ var value = this.value;
+ node = this.parseLiteral(value.value);
+ node.regex = { pattern: value.pattern, flags: value.flags };
+ return node;
+
+ case _tokentype.types.num:case _tokentype.types.string:
+ return this.parseLiteral(this.value);
+
+ case _tokentype.types._null:case _tokentype.types._true:case _tokentype.types._false:
+ node = this.startNode();
+ node.value = this.type === _tokentype.types._null ? null : this.type === _tokentype.types._true;
+ node.raw = this.type.keyword;
+ this.next();
+ return this.finishNode(node, "Literal");
+
+ case _tokentype.types.parenL:
+ return this.parseParenAndDistinguishExpression(canBeArrow);
+
+ case _tokentype.types.bracketL:
+ node = this.startNode();
+ this.next();
+ // check whether this is array comprehension or regular array
+ if (this.options.ecmaVersion >= 7 && this.type === _tokentype.types._for) {
+ return this.parseComprehension(node, false);
+ }
+ node.elements = this.parseExprList(_tokentype.types.bracketR, true, true, refDestructuringErrors);
+ return this.finishNode(node, "ArrayExpression");
+
+ case _tokentype.types.braceL:
+ return this.parseObj(false, refDestructuringErrors);
+
+ case _tokentype.types._function:
+ node = this.startNode();
+ this.next();
+ return this.parseFunction(node, false);
+
+ case _tokentype.types._class:
+ return this.parseClass(this.startNode(), false);
+
+ case _tokentype.types._new:
+ return this.parseNew();
+
+ case _tokentype.types.backQuote:
+ return this.parseTemplate();
+
+ default:
+ this.unexpected();
+ }
+};
+
+pp.parseLiteral = function (value) {
+ var node = this.startNode();
+ node.value = value;
+ node.raw = this.input.slice(this.start, this.end);
+ this.next();
+ return this.finishNode(node, "Literal");
+};
+
+pp.parseParenExpression = function () {
+ this.expect(_tokentype.types.parenL);
+ var val = this.parseExpression();
+ this.expect(_tokentype.types.parenR);
+ return val;
+};
+
+pp.parseParenAndDistinguishExpression = function (canBeArrow) {
+ var startPos = this.start,
+ startLoc = this.startLoc,
+ val = undefined;
+ if (this.options.ecmaVersion >= 6) {
+ this.next();
+
+ if (this.options.ecmaVersion >= 7 && this.type === _tokentype.types._for) {
+ return this.parseComprehension(this.startNodeAt(startPos, startLoc), true);
+ }
+
+ var innerStartPos = this.start,
+ innerStartLoc = this.startLoc;
+ var exprList = [],
+ first = true;
+ var refDestructuringErrors = { shorthandAssign: 0, trailingComma: 0 },
+ spreadStart = undefined,
+ innerParenStart = undefined;
+ while (this.type !== _tokentype.types.parenR) {
+ first ? first = false : this.expect(_tokentype.types.comma);
+ if (this.type === _tokentype.types.ellipsis) {
+ spreadStart = this.start;
+ exprList.push(this.parseParenItem(this.parseRest()));
+ break;
+ } else {
+ if (this.type === _tokentype.types.parenL && !innerParenStart) {
+ innerParenStart = this.start;
+ }
+ exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
+ }
+ }
+ var innerEndPos = this.start,
+ innerEndLoc = this.startLoc;
+ this.expect(_tokentype.types.parenR);
+
+ if (canBeArrow && !this.canInsertSemicolon() && this.eat(_tokentype.types.arrow)) {
+ this.checkPatternErrors(refDestructuringErrors, true);
+ if (innerParenStart) this.unexpected(innerParenStart);
+ return this.parseParenArrowList(startPos, startLoc, exprList);
+ }
+
+ if (!exprList.length) this.unexpected(this.lastTokStart);
+ if (spreadStart) this.unexpected(spreadStart);
+ this.checkExpressionErrors(refDestructuringErrors, true);
+
+ if (exprList.length > 1) {
+ val = this.startNodeAt(innerStartPos, innerStartLoc);
+ val.expressions = exprList;
+ this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
+ } else {
+ val = exprList[0];
+ }
+ } else {
+ val = this.parseParenExpression();
+ }
+
+ if (this.options.preserveParens) {
+ var par = this.startNodeAt(startPos, startLoc);
+ par.expression = val;
+ return this.finishNode(par, "ParenthesizedExpression");
+ } else {
+ return val;
+ }
+};
+
+pp.parseParenItem = function (item) {
+ return item;
+};
+
+pp.parseParenArrowList = function (startPos, startLoc, exprList) {
+ return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList);
+};
+
+// New's precedence is slightly tricky. It must allow its argument to
+// be a `[]` or dot subscript expression, but not a call — at least,
+// not without wrapping it in parentheses. Thus, it uses the noCalls
+// argument to parseSubscripts to prevent it from consuming the
+// argument list.
+
+var empty = [];
+
+pp.parseNew = function () {
+ var node = this.startNode();
+ var meta = this.parseIdent(true);
+ if (this.options.ecmaVersion >= 6 && this.eat(_tokentype.types.dot)) {
+ node.meta = meta;
+ node.property = this.parseIdent(true);
+ if (node.property.name !== "target") this.raise(node.property.start, "The only valid meta property for new is new.target");
+ if (!this.inFunction) this.raise(node.start, "new.target can only be used in functions");
+ return this.finishNode(node, "MetaProperty");
+ }
+ var startPos = this.start,
+ startLoc = this.startLoc;
+ node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);
+ if (this.eat(_tokentype.types.parenL)) node.arguments = this.parseExprList(_tokentype.types.parenR, false);else node.arguments = empty;
+ return this.finishNode(node, "NewExpression");
+};
+
+// Parse template expression.
+
+pp.parseTemplateElement = function () {
+ var elem = this.startNode();
+ elem.value = {
+ raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, '\n'),
+ cooked: this.value
+ };
+ this.next();
+ elem.tail = this.type === _tokentype.types.backQuote;
+ return this.finishNode(elem, "TemplateElement");
+};
+
+pp.parseTemplate = function () {
+ var node = this.startNode();
+ this.next();
+ node.expressions = [];
+ var curElt = this.parseTemplateElement();
+ node.quasis = [curElt];
+ while (!curElt.tail) {
+ this.expect(_tokentype.types.dollarBraceL);
+ node.expressions.push(this.parseExpression());
+ this.expect(_tokentype.types.braceR);
+ node.quasis.push(curElt = this.parseTemplateElement());
+ }
+ this.next();
+ return this.finishNode(node, "TemplateLiteral");
+};
+
+// Parse an object literal or binding pattern.
+
+pp.parseObj = function (isPattern, refDestructuringErrors) {
+ var node = this.startNode(),
+ first = true,
+ propHash = {};
+ node.properties = [];
+ this.next();
+ while (!this.eat(_tokentype.types.braceR)) {
+ if (!first) {
+ this.expect(_tokentype.types.comma);
+ if (this.afterTrailingComma(_tokentype.types.braceR)) break;
+ } else first = false;
+
+ var prop = this.startNode(),
+ isGenerator = undefined,
+ startPos = undefined,
+ startLoc = undefined;
+ if (this.options.ecmaVersion >= 6) {
+ prop.method = false;
+ prop.shorthand = false;
+ if (isPattern || refDestructuringErrors) {
+ startPos = this.start;
+ startLoc = this.startLoc;
+ }
+ if (!isPattern) isGenerator = this.eat(_tokentype.types.star);
+ }
+ this.parsePropertyName(prop);
+ this.parsePropertyValue(prop, isPattern, isGenerator, startPos, startLoc, refDestructuringErrors);
+ this.checkPropClash(prop, propHash);
+ node.properties.push(this.finishNode(prop, "Property"));
+ }
+ return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression");
+};
+
+pp.parsePropertyValue = function (prop, isPattern, isGenerator, startPos, startLoc, refDestructuringErrors) {
+ if (this.eat(_tokentype.types.colon)) {
+ prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
+ prop.kind = "init";
+ } else if (this.options.ecmaVersion >= 6 && this.type === _tokentype.types.parenL) {
+ if (isPattern) this.unexpected();
+ prop.kind = "init";
+ prop.method = true;
+ prop.value = this.parseMethod(isGenerator);
+ } else if (this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" && (prop.key.name === "get" || prop.key.name === "set") && (this.type != _tokentype.types.comma && this.type != _tokentype.types.braceR)) {
+ if (isGenerator || isPattern) this.unexpected();
+ prop.kind = prop.key.name;
+ this.parsePropertyName(prop);
+ prop.value = this.parseMethod(false);
+ var paramCount = prop.kind === "get" ? 0 : 1;
+ if (prop.value.params.length !== paramCount) {
+ var start = prop.value.start;
+ if (prop.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param");
+ }
+ if (prop.kind === "set" && prop.value.params[0].type === "RestElement") this.raise(prop.value.params[0].start, "Setter cannot use rest params");
+ } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
+ prop.kind = "init";
+ if (isPattern) {
+ if (this.keywords.test(prop.key.name) || (this.strict ? this.reservedWordsStrictBind : this.reservedWords).test(prop.key.name)) this.raise(prop.key.start, "Binding " + prop.key.name);
+ prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
+ } else if (this.type === _tokentype.types.eq && refDestructuringErrors) {
+ if (!refDestructuringErrors.shorthandAssign) refDestructuringErrors.shorthandAssign = this.start;
+ prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);
+ } else {
+ prop.value = prop.key;
+ }
+ prop.shorthand = true;
+ } else this.unexpected();
+};
+
+pp.parsePropertyName = function (prop) {
+ if (this.options.ecmaVersion >= 6) {
+ if (this.eat(_tokentype.types.bracketL)) {
+ prop.computed = true;
+ prop.key = this.parseMaybeAssign();
+ this.expect(_tokentype.types.bracketR);
+ return prop.key;
+ } else {
+ prop.computed = false;
+ }
+ }
+ return prop.key = this.type === _tokentype.types.num || this.type === _tokentype.types.string ? this.parseExprAtom() : this.parseIdent(true);
+};
+
+// Initialize empty function node.
+
+pp.initFunction = function (node) {
+ node.id = null;
+ if (this.options.ecmaVersion >= 6) {
+ node.generator = false;
+ node.expression = false;
+ }
+};
+
+// Parse object or class method.
+
+pp.parseMethod = function (isGenerator) {
+ var node = this.startNode();
+ this.initFunction(node);
+ this.expect(_tokentype.types.parenL);
+ node.params = this.parseBindingList(_tokentype.types.parenR, false, false);
+ if (this.options.ecmaVersion >= 6) node.generator = isGenerator;
+ this.parseFunctionBody(node, false);
+ return this.finishNode(node, "FunctionExpression");
+};
+
+// Parse arrow function expression with given parameters.
+
+pp.parseArrowExpression = function (node, params) {
+ this.initFunction(node);
+ node.params = this.toAssignableList(params, true);
+ this.parseFunctionBody(node, true);
+ return this.finishNode(node, "ArrowFunctionExpression");
+};
+
+// Parse function body and check parameters.
+
+pp.parseFunctionBody = function (node, isArrowFunction) {
+ var isExpression = isArrowFunction && this.type !== _tokentype.types.braceL;
+
+ if (isExpression) {
+ node.body = this.parseMaybeAssign();
+ node.expression = true;
+ } else {
+ // Start a new scope with regard to labels and the `inFunction`
+ // flag (restore them to their old value afterwards).
+ var oldInFunc = this.inFunction,
+ oldInGen = this.inGenerator,
+ oldLabels = this.labels;
+ this.inFunction = true;this.inGenerator = node.generator;this.labels = [];
+ node.body = this.parseBlock(true);
+ node.expression = false;
+ this.inFunction = oldInFunc;this.inGenerator = oldInGen;this.labels = oldLabels;
+ }
+
+ // If this is a strict mode function, verify that argument names
+ // are not repeated, and it does not try to bind the words `eval`
+ // or `arguments`.
+ if (this.strict || !isExpression && node.body.body.length && this.isUseStrict(node.body.body[0])) {
+ var oldStrict = this.strict;
+ this.strict = true;
+ if (node.id) this.checkLVal(node.id, true);
+ this.checkParams(node);
+ this.strict = oldStrict;
+ } else if (isArrowFunction) {
+ this.checkParams(node);
+ }
+};
+
+// Checks function params for various disallowed patterns such as using "eval"
+// or "arguments" and duplicate parameters.
+
+pp.checkParams = function (node) {
+ var nameHash = {};
+ for (var i = 0; i < node.params.length; i++) {
+ this.checkLVal(node.params[i], true, nameHash);
+ }
+};
+
+// Parses a comma-separated list of expressions, and returns them as
+// an array. `close` is the token type that ends the list, and
+// `allowEmpty` can be turned on to allow subsequent commas with
+// nothing in between them to be parsed as `null` (which is needed
+// for array literals).
+
+pp.parseExprList = function (close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
+ var elts = [],
+ first = true;
+ while (!this.eat(close)) {
+ if (!first) {
+ this.expect(_tokentype.types.comma);
+ if (this.type === close && refDestructuringErrors && !refDestructuringErrors.trailingComma) {
+ refDestructuringErrors.trailingComma = this.lastTokStart;
+ }
+ if (allowTrailingComma && this.afterTrailingComma(close)) break;
+ } else first = false;
+
+ var elt = undefined;
+ if (allowEmpty && this.type === _tokentype.types.comma) elt = null;else if (this.type === _tokentype.types.ellipsis) elt = this.parseSpread(refDestructuringErrors);else elt = this.parseMaybeAssign(false, refDestructuringErrors);
+ elts.push(elt);
+ }
+ return elts;
+};
+
+// Parse the next token as an identifier. If `liberal` is true (used
+// when parsing properties), it will also convert keywords into
+// identifiers.
+
+pp.parseIdent = function (liberal) {
+ var node = this.startNode();
+ if (liberal && this.options.allowReserved == "never") liberal = false;
+ if (this.type === _tokentype.types.name) {
+ if (!liberal && (this.strict ? this.reservedWordsStrict : this.reservedWords).test(this.value) && (this.options.ecmaVersion >= 6 || this.input.slice(this.start, this.end).indexOf("\\") == -1)) this.raise(this.start, "The keyword '" + this.value + "' is reserved");
+ node.name = this.value;
+ } else if (liberal && this.type.keyword) {
+ node.name = this.type.keyword;
+ } else {
+ this.unexpected();
+ }
+ this.next();
+ return this.finishNode(node, "Identifier");
+};
+
+// Parses yield expression inside generator.
+
+pp.parseYield = function () {
+ var node = this.startNode();
+ this.next();
+ if (this.type == _tokentype.types.semi || this.canInsertSemicolon() || this.type != _tokentype.types.star && !this.type.startsExpr) {
+ node.delegate = false;
+ node.argument = null;
+ } else {
+ node.delegate = this.eat(_tokentype.types.star);
+ node.argument = this.parseMaybeAssign();
+ }
+ return this.finishNode(node, "YieldExpression");
+};
+
+// Parses array and generator comprehensions.
+
+pp.parseComprehension = function (node, isGenerator) {
+ node.blocks = [];
+ while (this.type === _tokentype.types._for) {
+ var block = this.startNode();
+ this.next();
+ this.expect(_tokentype.types.parenL);
+ block.left = this.parseBindingAtom();
+ this.checkLVal(block.left, true);
+ this.expectContextual("of");
+ block.right = this.parseExpression();
+ this.expect(_tokentype.types.parenR);
+ node.blocks.push(this.finishNode(block, "ComprehensionBlock"));
+ }
+ node.filter = this.eat(_tokentype.types._if) ? this.parseParenExpression() : null;
+ node.body = this.parseExpression();
+ this.expect(isGenerator ? _tokentype.types.parenR : _tokentype.types.bracketR);
+ node.generator = isGenerator;
+ return this.finishNode(node, "ComprehensionExpression");
+};
+
+},{"./state":10,"./tokentype":14}],2:[function(_dereq_,module,exports){
+// This is a trick taken from Esprima. It turns out that, on
+// non-Chrome browsers, to check whether a string is in a set, a
+// predicate containing a big ugly `switch` statement is faster than
+// a regular expression, and on Chrome the two are about on par.
+// This function uses `eval` (non-lexical) to produce such a
+// predicate from a space-separated string of words.
+//
+// It starts by sorting the words by length.
+
+// Reserved word lists for various dialects of the language
+
+"use strict";
+
+exports.__esModule = true;
+exports.isIdentifierStart = isIdentifierStart;
+exports.isIdentifierChar = isIdentifierChar;
+var reservedWords = {
+ 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
+ 5: "class enum extends super const export import",
+ 6: "enum",
+ strict: "implements interface let package private protected public static yield",
+ strictBind: "eval arguments"
+};
+
+exports.reservedWords = reservedWords;
+// And the keywords
+
+var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
+
+var keywords = {
+ 5: ecma5AndLessKeywords,
+ 6: ecma5AndLessKeywords + " let const class extends export import yield super"
+};
+
+exports.keywords = keywords;
+// ## Character categories
+
+// Big ugly regular expressions that match characters in the
+// whitespace, identifier, and identifier-start categories. These
+// are only applied when a character is found to actually have a
+// code point above 128.
+// Generated by `bin/generate-identifier-regex.js`.
+
+var nonASCIIidentifierStartChars = "ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠ-ࢲऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞭꞰꞱꟷ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭟꭤꭥꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ";
+var nonASCIIidentifierChars = "·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛ࣤ-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ଁ-ଃ଼ା-ୄେୈୋ-୍ୖୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఃా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ഁ-ഃാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ංඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ູົຼ່-ໍ໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜔ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠐-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏ᦰ-ᧀᧈᧉ᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭ᳲ-᳴᳸᳹᷀-᷵᷼-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧꢀꢁꢴ-꣄꣐-꣙꣠-꣱꤀-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︭︳︴﹍-﹏0-9_";
+
+var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
+var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
+
+nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
+
+// These are a run-length and offset encoded representation of the
+// >0xffff code points that are a valid part of identifiers. The
+// offset starts at 0x10000, and each pair of numbers represents an
+// offset to the next range, and then a size of the range. They were
+// generated by tools/generate-identifier-regex.js
+var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 17, 26, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 99, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 98, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 26, 45, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 955, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 38, 17, 2, 24, 133, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 32, 4, 287, 47, 21, 1, 2, 0, 185, 46, 82, 47, 21, 0, 60, 42, 502, 63, 32, 0, 449, 56, 1288, 920, 104, 110, 2962, 1070, 13266, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 16481, 1, 3071, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 4149, 196, 1340, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42710, 42, 4148, 12, 221, 16355, 541];
+var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 1306, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 52, 0, 13, 2, 49, 13, 16, 9, 83, 11, 168, 11, 6, 9, 8, 2, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 316, 19, 13, 9, 214, 6, 3, 8, 112, 16, 16, 9, 82, 12, 9, 9, 535, 9, 20855, 9, 135, 4, 60, 6, 26, 9, 1016, 45, 17, 3, 19723, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 4305, 6, 792618, 239];
+
+// This has a complexity linear to the value of the code. The
+// assumption is that looking up astral identifier characters is
+// rare.
+function isInAstralSet(code, set) {
+ var pos = 0x10000;
+ for (var i = 0; i < set.length; i += 2) {
+ pos += set[i];
+ if (pos > code) return false;
+ pos += set[i + 1];
+ if (pos >= code) return true;
+ }
+}
+
+// Test whether a given character code starts an identifier.
+
+function isIdentifierStart(code, astral) {
+ if (code < 65) return code === 36;
+ if (code < 91) return true;
+ if (code < 97) return code === 95;
+ if (code < 123) return true;
+ if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
+ if (astral === false) return false;
+ return isInAstralSet(code, astralIdentifierStartCodes);
+}
+
+// Test whether a given character is part of an identifier.
+
+function isIdentifierChar(code, astral) {
+ if (code < 48) return code === 36;
+ if (code < 58) return true;
+ if (code < 65) return false;
+ if (code < 91) return true;
+ if (code < 97) return code === 95;
+ if (code < 123) return true;
+ if (code <= 0xffff) return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
+ if (astral === false) return false;
+ return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
+}
+
+},{}],3:[function(_dereq_,module,exports){
+// Acorn is a tiny, fast JavaScript parser written in JavaScript.
+//
+// Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and
+// various contributors and released under an MIT license.
+//
+// Git repositories for Acorn are available at
+//
+// http://marijnhaverbeke.nl/git/acorn
+// https://github.com/ternjs/acorn.git
+//
+// Please use the [github bug tracker][ghbt] to report issues.
+//
+// [ghbt]: https://github.com/ternjs/acorn/issues
+//
+// This file defines the main parser interface. The library also comes
+// with a [error-tolerant parser][dammit] and an
+// [abstract syntax tree walker][walk], defined in other files.
+//
+// [dammit]: acorn_loose.js
+// [walk]: util/walk.js
+
+"use strict";
+
+exports.__esModule = true;
+exports.parse = parse;
+exports.parseExpressionAt = parseExpressionAt;
+exports.tokenizer = tokenizer;
+
+var _state = _dereq_("./state");
+
+_dereq_("./parseutil");
+
+_dereq_("./statement");
+
+_dereq_("./lval");
+
+_dereq_("./expression");
+
+_dereq_("./location");
+
+exports.Parser = _state.Parser;
+exports.plugins = _state.plugins;
+
+var _options = _dereq_("./options");
+
+exports.defaultOptions = _options.defaultOptions;
+
+var _locutil = _dereq_("./locutil");
+
+exports.Position = _locutil.Position;
+exports.SourceLocation = _locutil.SourceLocation;
+exports.getLineInfo = _locutil.getLineInfo;
+
+var _node = _dereq_("./node");
+
+exports.Node = _node.Node;
+
+var _tokentype = _dereq_("./tokentype");
+
+exports.TokenType = _tokentype.TokenType;
+exports.tokTypes = _tokentype.types;
+
+var _tokencontext = _dereq_("./tokencontext");
+
+exports.TokContext = _tokencontext.TokContext;
+exports.tokContexts = _tokencontext.types;
+
+var _identifier = _dereq_("./identifier");
+
+exports.isIdentifierChar = _identifier.isIdentifierChar;
+exports.isIdentifierStart = _identifier.isIdentifierStart;
+
+var _tokenize = _dereq_("./tokenize");
+
+exports.Token = _tokenize.Token;
+
+var _whitespace = _dereq_("./whitespace");
+
+exports.isNewLine = _whitespace.isNewLine;
+exports.lineBreak = _whitespace.lineBreak;
+exports.lineBreakG = _whitespace.lineBreakG;
+var version = "2.7.0";
+
+exports.version = version;
+// The main exported interface (under `self.acorn` when in the
+// browser) is a `parse` function that takes a code string and
+// returns an abstract syntax tree as specified by [Mozilla parser
+// API][api].
+//
+// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
+
+function parse(input, options) {
+ return new _state.Parser(options, input).parse();
+}
+
+// This function tries to parse a single expression at a given
+// offset in a string. Useful for parsing mixed-language formats
+// that embed JavaScript expressions.
+
+function parseExpressionAt(input, pos, options) {
+ var p = new _state.Parser(options, input, pos);
+ p.nextToken();
+ return p.parseExpression();
+}
+
+// Acorn is organized as a tokenizer and a recursive-descent parser.
+// The `tokenizer` export provides an interface to the tokenizer.
+
+function tokenizer(input, options) {
+ return new _state.Parser(options, input);
+}
+
+},{"./expression":1,"./identifier":2,"./location":4,"./locutil":5,"./lval":6,"./node":7,"./options":8,"./parseutil":9,"./state":10,"./statement":11,"./tokencontext":12,"./tokenize":13,"./tokentype":14,"./whitespace":16}],4:[function(_dereq_,module,exports){
+"use strict";
+
+var _state = _dereq_("./state");
+
+var _locutil = _dereq_("./locutil");
+
+var pp = _state.Parser.prototype;
+
+// This function is used to raise exceptions on parse errors. It
+// takes an offset integer (into the current `input`) to indicate
+// the location of the error, attaches the position to the end
+// of the error message, and then raises a `SyntaxError` with that
+// message.
+
+pp.raise = function (pos, message) {
+ var loc = _locutil.getLineInfo(this.input, pos);
+ message += " (" + loc.line + ":" + loc.column + ")";
+ var err = new SyntaxError(message);
+ err.pos = pos;err.loc = loc;err.raisedAt = this.pos;
+ throw err;
+};
+
+pp.curPosition = function () {
+ if (this.options.locations) {
+ return new _locutil.Position(this.curLine, this.pos - this.lineStart);
+ }
+};
+
+},{"./locutil":5,"./state":10}],5:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.getLineInfo = getLineInfo;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _whitespace = _dereq_("./whitespace");
+
+// These are used when `options.locations` is on, for the
+// `startLoc` and `endLoc` properties.
+
+var Position = (function () {
+ function Position(line, col) {
+ _classCallCheck(this, Position);
+
+ this.line = line;
+ this.column = col;
+ }
+
+ Position.prototype.offset = function offset(n) {
+ return new Position(this.line, this.column + n);
+ };
+
+ return Position;
+})();
+
+exports.Position = Position;
+
+var SourceLocation = function SourceLocation(p, start, end) {
+ _classCallCheck(this, SourceLocation);
+
+ this.start = start;
+ this.end = end;
+ if (p.sourceFile !== null) this.source = p.sourceFile;
+}
+
+// The `getLineInfo` function is mostly useful when the
+// `locations` option is off (for performance reasons) and you
+// want to find the line/column position for a given character
+// offset. `input` should be the code string that the offset refers
+// into.
+
+;
+
+exports.SourceLocation = SourceLocation;
+
+function getLineInfo(input, offset) {
+ for (var line = 1, cur = 0;;) {
+ _whitespace.lineBreakG.lastIndex = cur;
+ var match = _whitespace.lineBreakG.exec(input);
+ if (match && match.index < offset) {
+ ++line;
+ cur = match.index + match[0].length;
+ } else {
+ return new Position(line, offset - cur);
+ }
+ }
+}
+
+},{"./whitespace":16}],6:[function(_dereq_,module,exports){
+"use strict";
+
+var _tokentype = _dereq_("./tokentype");
+
+var _state = _dereq_("./state");
+
+var _util = _dereq_("./util");
+
+var pp = _state.Parser.prototype;
+
+// Convert existing expression atom to assignable pattern
+// if possible.
+
+pp.toAssignable = function (node, isBinding) {
+ if (this.options.ecmaVersion >= 6 && node) {
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ break;
+
+ case "ObjectExpression":
+ node.type = "ObjectPattern";
+ for (var i = 0; i < node.properties.length; i++) {
+ var prop = node.properties[i];
+ if (prop.kind !== "init") this.raise(prop.key.start, "Object pattern can't contain getter or setter");
+ this.toAssignable(prop.value, isBinding);
+ }
+ break;
+
+ case "ArrayExpression":
+ node.type = "ArrayPattern";
+ this.toAssignableList(node.elements, isBinding);
+ break;
+
+ case "AssignmentExpression":
+ if (node.operator === "=") {
+ node.type = "AssignmentPattern";
+ delete node.operator;
+ // falls through to AssignmentPattern
+ } else {
+ this.raise(node.left.end, "Only '=' operator can be used for specifying default value.");
+ break;
+ }
+
+ case "AssignmentPattern":
+ if (node.right.type === "YieldExpression") this.raise(node.right.start, "Yield expression cannot be a default value");
+ break;
+
+ case "ParenthesizedExpression":
+ node.expression = this.toAssignable(node.expression, isBinding);
+ break;
+
+ case "MemberExpression":
+ if (!isBinding) break;
+
+ default:
+ this.raise(node.start, "Assigning to rvalue");
+ }
+ }
+ return node;
+};
+
+// Convert list of expression atoms to binding list.
+
+pp.toAssignableList = function (exprList, isBinding) {
+ var end = exprList.length;
+ if (end) {
+ var last = exprList[end - 1];
+ if (last && last.type == "RestElement") {
+ --end;
+ } else if (last && last.type == "SpreadElement") {
+ last.type = "RestElement";
+ var arg = last.argument;
+ this.toAssignable(arg, isBinding);
+ if (arg.type !== "Identifier" && arg.type !== "MemberExpression" && arg.type !== "ArrayPattern") this.unexpected(arg.start);
+ --end;
+ }
+
+ if (isBinding && last.type === "RestElement" && last.argument.type !== "Identifier") this.unexpected(last.argument.start);
+ }
+ for (var i = 0; i < end; i++) {
+ var elt = exprList[i];
+ if (elt) this.toAssignable(elt, isBinding);
+ }
+ return exprList;
+};
+
+// Parses spread element.
+
+pp.parseSpread = function (refDestructuringErrors) {
+ var node = this.startNode();
+ this.next();
+ node.argument = this.parseMaybeAssign(refDestructuringErrors);
+ return this.finishNode(node, "SpreadElement");
+};
+
+pp.parseRest = function (allowNonIdent) {
+ var node = this.startNode();
+ this.next();
+
+ // RestElement inside of a function parameter must be an identifier
+ if (allowNonIdent) node.argument = this.type === _tokentype.types.name ? this.parseIdent() : this.unexpected();else node.argument = this.type === _tokentype.types.name || this.type === _tokentype.types.bracketL ? this.parseBindingAtom() : this.unexpected();
+
+ return this.finishNode(node, "RestElement");
+};
+
+// Parses lvalue (assignable) atom.
+
+pp.parseBindingAtom = function () {
+ if (this.options.ecmaVersion < 6) return this.parseIdent();
+ switch (this.type) {
+ case _tokentype.types.name:
+ return this.parseIdent();
+
+ case _tokentype.types.bracketL:
+ var node = this.startNode();
+ this.next();
+ node.elements = this.parseBindingList(_tokentype.types.bracketR, true, true);
+ return this.finishNode(node, "ArrayPattern");
+
+ case _tokentype.types.braceL:
+ return this.parseObj(true);
+
+ default:
+ this.unexpected();
+ }
+};
+
+pp.parseBindingList = function (close, allowEmpty, allowTrailingComma, allowNonIdent) {
+ var elts = [],
+ first = true;
+ while (!this.eat(close)) {
+ if (first) first = false;else this.expect(_tokentype.types.comma);
+ if (allowEmpty && this.type === _tokentype.types.comma) {
+ elts.push(null);
+ } else if (allowTrailingComma && this.afterTrailingComma(close)) {
+ break;
+ } else if (this.type === _tokentype.types.ellipsis) {
+ var rest = this.parseRest(allowNonIdent);
+ this.parseBindingListItem(rest);
+ elts.push(rest);
+ this.expect(close);
+ break;
+ } else {
+ var elem = this.parseMaybeDefault(this.start, this.startLoc);
+ this.parseBindingListItem(elem);
+ elts.push(elem);
+ }
+ }
+ return elts;
+};
+
+pp.parseBindingListItem = function (param) {
+ return param;
+};
+
+// Parses assignment pattern around given atom if possible.
+
+pp.parseMaybeDefault = function (startPos, startLoc, left) {
+ left = left || this.parseBindingAtom();
+ if (this.options.ecmaVersion < 6 || !this.eat(_tokentype.types.eq)) return left;
+ var node = this.startNodeAt(startPos, startLoc);
+ node.left = left;
+ node.right = this.parseMaybeAssign();
+ return this.finishNode(node, "AssignmentPattern");
+};
+
+// Verify that a node is an lval — something that can be assigned
+// to.
+
+pp.checkLVal = function (expr, isBinding, checkClashes) {
+ switch (expr.type) {
+ case "Identifier":
+ if (this.strict && this.reservedWordsStrictBind.test(expr.name)) this.raise(expr.start, (isBinding ? "Binding " : "Assigning to ") + expr.name + " in strict mode");
+ if (checkClashes) {
+ if (_util.has(checkClashes, expr.name)) this.raise(expr.start, "Argument name clash");
+ checkClashes[expr.name] = true;
+ }
+ break;
+
+ case "MemberExpression":
+ if (isBinding) this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " member expression");
+ break;
+
+ case "ObjectPattern":
+ for (var i = 0; i < expr.properties.length; i++) {
+ this.checkLVal(expr.properties[i].value, isBinding, checkClashes);
+ }break;
+
+ case "ArrayPattern":
+ for (var i = 0; i < expr.elements.length; i++) {
+ var elem = expr.elements[i];
+ if (elem) this.checkLVal(elem, isBinding, checkClashes);
+ }
+ break;
+
+ case "AssignmentPattern":
+ this.checkLVal(expr.left, isBinding, checkClashes);
+ break;
+
+ case "RestElement":
+ this.checkLVal(expr.argument, isBinding, checkClashes);
+ break;
+
+ case "ParenthesizedExpression":
+ this.checkLVal(expr.expression, isBinding, checkClashes);
+ break;
+
+ default:
+ this.raise(expr.start, (isBinding ? "Binding" : "Assigning to") + " rvalue");
+ }
+};
+
+},{"./state":10,"./tokentype":14,"./util":15}],7:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _state = _dereq_("./state");
+
+var _locutil = _dereq_("./locutil");
+
+var Node = function Node(parser, pos, loc) {
+ _classCallCheck(this, Node);
+
+ this.type = "";
+ this.start = pos;
+ this.end = 0;
+ if (parser.options.locations) this.loc = new _locutil.SourceLocation(parser, loc);
+ if (parser.options.directSourceFile) this.sourceFile = parser.options.directSourceFile;
+ if (parser.options.ranges) this.range = [pos, 0];
+}
+
+// Start an AST node, attaching a start offset.
+
+;
+
+exports.Node = Node;
+var pp = _state.Parser.prototype;
+
+pp.startNode = function () {
+ return new Node(this, this.start, this.startLoc);
+};
+
+pp.startNodeAt = function (pos, loc) {
+ return new Node(this, pos, loc);
+};
+
+// Finish an AST node, adding `type` and `end` properties.
+
+function finishNodeAt(node, type, pos, loc) {
+ node.type = type;
+ node.end = pos;
+ if (this.options.locations) node.loc.end = loc;
+ if (this.options.ranges) node.range[1] = pos;
+ return node;
+}
+
+pp.finishNode = function (node, type) {
+ return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);
+};
+
+// Finish node at given position
+
+pp.finishNodeAt = function (node, type, pos, loc) {
+ return finishNodeAt.call(this, node, type, pos, loc);
+};
+
+},{"./locutil":5,"./state":10}],8:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.getOptions = getOptions;
+
+var _util = _dereq_("./util");
+
+var _locutil = _dereq_("./locutil");
+
+// A second optional argument can be given to further configure
+// the parser process. These options are recognized:
+
+var defaultOptions = {
+ // `ecmaVersion` indicates the ECMAScript version to parse. Must
+ // be either 3, or 5, or 6. This influences support for strict
+ // mode, the set of reserved words, support for getters and
+ // setters and other features.
+ ecmaVersion: 5,
+ // Source type ("script" or "module") for different semantics
+ sourceType: "script",
+ // `onInsertedSemicolon` can be a callback that will be called
+ // when a semicolon is automatically inserted. It will be passed
+ // th position of the comma as an offset, and if `locations` is
+ // enabled, it is given the location as a `{line, column}` object
+ // as second argument.
+ onInsertedSemicolon: null,
+ // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
+ // trailing commas.
+ onTrailingComma: null,
+ // By default, reserved words are only enforced if ecmaVersion >= 5.
+ // Set `allowReserved` to a boolean value to explicitly turn this on
+ // an off. When this option has the value "never", reserved words
+ // and keywords can also not be used as property names.
+ allowReserved: null,
+ // When enabled, a return at the top level is not considered an
+ // error.
+ allowReturnOutsideFunction: false,
+ // When enabled, import/export statements are not constrained to
+ // appearing at the top of the program.
+ allowImportExportEverywhere: false,
+ // When enabled, hashbang directive in the beginning of file
+ // is allowed and treated as a line comment.
+ allowHashBang: false,
+ // When `locations` is on, `loc` properties holding objects with
+ // `start` and `end` properties in `{line, column}` form (with
+ // line being 1-based and column 0-based) will be attached to the
+ // nodes.
+ locations: false,
+ // A function can be passed as `onToken` option, which will
+ // cause Acorn to call that function with object in the same
+ // format as tokens returned from `tokenizer().getToken()`. Note
+ // that you are not allowed to call the parser from the
+ // callback—that will corrupt its internal state.
+ onToken: null,
+ // A function can be passed as `onComment` option, which will
+ // cause Acorn to call that function with `(block, text, start,
+ // end)` parameters whenever a comment is skipped. `block` is a
+ // boolean indicating whether this is a block (`/* */`) comment,
+ // `text` is the content of the comment, and `start` and `end` are
+ // character offsets that denote the start and end of the comment.
+ // When the `locations` option is on, two more parameters are
+ // passed, the full `{line, column}` locations of the start and
+ // end of the comments. Note that you are not allowed to call the
+ // parser from the callback—that will corrupt its internal state.
+ onComment: null,
+ // Nodes have their start and end characters offsets recorded in
+ // `start` and `end` properties (directly on the node, rather than
+ // the `loc` object, which holds line/column data. To also add a
+ // [semi-standardized][range] `range` property holding a `[start,
+ // end]` array with the same numbers, set the `ranges` option to
+ // `true`.
+ //
+ // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
+ ranges: false,
+ // It is possible to parse multiple files into a single AST by
+ // passing the tree produced by parsing the first file as
+ // `program` option in subsequent parses. This will add the
+ // toplevel forms of the parsed file to the `Program` (top) node
+ // of an existing parse tree.
+ program: null,
+ // When `locations` is on, you can pass this to record the source
+ // file in every node's `loc` object.
+ sourceFile: null,
+ // This value, if given, is stored in every node, whether
+ // `locations` is on or off.
+ directSourceFile: null,
+ // When enabled, parenthesized expressions are represented by
+ // (non-standard) ParenthesizedExpression nodes
+ preserveParens: false,
+ plugins: {}
+};
+
+exports.defaultOptions = defaultOptions;
+// Interpret and default an options object
+
+function getOptions(opts) {
+ var options = {};
+ for (var opt in defaultOptions) {
+ options[opt] = opts && _util.has(opts, opt) ? opts[opt] : defaultOptions[opt];
+ }if (options.allowReserved == null) options.allowReserved = options.ecmaVersion < 5;
+
+ if (_util.isArray(options.onToken)) {
+ (function () {
+ var tokens = options.onToken;
+ options.onToken = function (token) {
+ return tokens.push(token);
+ };
+ })();
+ }
+ if (_util.isArray(options.onComment)) options.onComment = pushComment(options, options.onComment);
+
+ return options;
+}
+
+function pushComment(options, array) {
+ return function (block, text, start, end, startLoc, endLoc) {
+ var comment = {
+ type: block ? 'Block' : 'Line',
+ value: text,
+ start: start,
+ end: end
+ };
+ if (options.locations) comment.loc = new _locutil.SourceLocation(this, startLoc, endLoc);
+ if (options.ranges) comment.range = [start, end];
+ array.push(comment);
+ };
+}
+
+},{"./locutil":5,"./util":15}],9:[function(_dereq_,module,exports){
+"use strict";
+
+var _tokentype = _dereq_("./tokentype");
+
+var _state = _dereq_("./state");
+
+var _whitespace = _dereq_("./whitespace");
+
+var pp = _state.Parser.prototype;
+
+// ## Parser utilities
+
+// Test whether a statement node is the string literal `"use strict"`.
+
+pp.isUseStrict = function (stmt) {
+ return this.options.ecmaVersion >= 5 && stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && stmt.expression.raw.slice(1, -1) === "use strict";
+};
+
+// Predicate that tests whether the next token is of the given
+// type, and if yes, consumes it as a side effect.
+
+pp.eat = function (type) {
+ if (this.type === type) {
+ this.next();
+ return true;
+ } else {
+ return false;
+ }
+};
+
+// Tests whether parsed token is a contextual keyword.
+
+pp.isContextual = function (name) {
+ return this.type === _tokentype.types.name && this.value === name;
+};
+
+// Consumes contextual keyword if possible.
+
+pp.eatContextual = function (name) {
+ return this.value === name && this.eat(_tokentype.types.name);
+};
+
+// Asserts that following token is given contextual keyword.
+
+pp.expectContextual = function (name) {
+ if (!this.eatContextual(name)) this.unexpected();
+};
+
+// Test whether a semicolon can be inserted at the current position.
+
+pp.canInsertSemicolon = function () {
+ return this.type === _tokentype.types.eof || this.type === _tokentype.types.braceR || _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start));
+};
+
+pp.insertSemicolon = function () {
+ if (this.canInsertSemicolon()) {
+ if (this.options.onInsertedSemicolon) this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);
+ return true;
+ }
+};
+
+// Consume a semicolon, or, failing that, see if we are allowed to
+// pretend that there is a semicolon at this position.
+
+pp.semicolon = function () {
+ if (!this.eat(_tokentype.types.semi) && !this.insertSemicolon()) this.unexpected();
+};
+
+pp.afterTrailingComma = function (tokType) {
+ if (this.type == tokType) {
+ if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);
+ this.next();
+ return true;
+ }
+};
+
+// Expect a token of a given type. If found, consume it, otherwise,
+// raise an unexpected token error.
+
+pp.expect = function (type) {
+ this.eat(type) || this.unexpected();
+};
+
+// Raise an unexpected token error.
+
+pp.unexpected = function (pos) {
+ this.raise(pos != null ? pos : this.start, "Unexpected token");
+};
+
+pp.checkPatternErrors = function (refDestructuringErrors, andThrow) {
+ var pos = refDestructuringErrors && refDestructuringErrors.trailingComma;
+ if (!andThrow) return !!pos;
+ if (pos) this.raise(pos, "Trailing comma is not permitted in destructuring patterns");
+};
+
+pp.checkExpressionErrors = function (refDestructuringErrors, andThrow) {
+ var pos = refDestructuringErrors && refDestructuringErrors.shorthandAssign;
+ if (!andThrow) return !!pos;
+ if (pos) this.raise(pos, "Shorthand property assignments are valid only in destructuring patterns");
+};
+
+},{"./state":10,"./tokentype":14,"./whitespace":16}],10:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _identifier = _dereq_("./identifier");
+
+var _tokentype = _dereq_("./tokentype");
+
+var _whitespace = _dereq_("./whitespace");
+
+var _options = _dereq_("./options");
+
+// Registered plugins
+var plugins = {};
+
+exports.plugins = plugins;
+function keywordRegexp(words) {
+ return new RegExp("^(" + words.replace(/ /g, "|") + ")$");
+}
+
+var Parser = (function () {
+ function Parser(options, input, startPos) {
+ _classCallCheck(this, Parser);
+
+ this.options = options = _options.getOptions(options);
+ this.sourceFile = options.sourceFile;
+ this.keywords = keywordRegexp(_identifier.keywords[options.ecmaVersion >= 6 ? 6 : 5]);
+ var reserved = options.allowReserved ? "" : _identifier.reservedWords[options.ecmaVersion] + (options.sourceType == "module" ? " await" : "");
+ this.reservedWords = keywordRegexp(reserved);
+ var reservedStrict = (reserved ? reserved + " " : "") + _identifier.reservedWords.strict;
+ this.reservedWordsStrict = keywordRegexp(reservedStrict);
+ this.reservedWordsStrictBind = keywordRegexp(reservedStrict + " " + _identifier.reservedWords.strictBind);
+ this.input = String(input);
+
+ // Used to signal to callers of `readWord1` whether the word
+ // contained any escape sequences. This is needed because words with
+ // escape sequences must not be interpreted as keywords.
+ this.containsEsc = false;
+
+ // Load plugins
+ this.loadPlugins(options.plugins);
+
+ // Set up token state
+
+ // The current position of the tokenizer in the input.
+ if (startPos) {
+ this.pos = startPos;
+ this.lineStart = Math.max(0, this.input.lastIndexOf("\n", startPos));
+ this.curLine = this.input.slice(0, this.lineStart).split(_whitespace.lineBreak).length;
+ } else {
+ this.pos = this.lineStart = 0;
+ this.curLine = 1;
+ }
+
+ // Properties of the current token:
+ // Its type
+ this.type = _tokentype.types.eof;
+ // For tokens that include more information than their type, the value
+ this.value = null;
+ // Its start and end offset
+ this.start = this.end = this.pos;
+ // And, if locations are used, the {line, column} object
+ // corresponding to those offsets
+ this.startLoc = this.endLoc = this.curPosition();
+
+ // Position information for the previous token
+ this.lastTokEndLoc = this.lastTokStartLoc = null;
+ this.lastTokStart = this.lastTokEnd = this.pos;
+
+ // The context stack is used to superficially track syntactic
+ // context to predict whether a regular expression is allowed in a
+ // given position.
+ this.context = this.initialContext();
+ this.exprAllowed = true;
+
+ // Figure out if it's a module code.
+ this.strict = this.inModule = options.sourceType === "module";
+
+ // Used to signify the start of a potential arrow function
+ this.potentialArrowAt = -1;
+
+ // Flags to track whether we are in a function, a generator.
+ this.inFunction = this.inGenerator = false;
+ // Labels in scope.
+ this.labels = [];
+
+ // If enabled, skip leading hashbang line.
+ if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === '#!') this.skipLineComment(2);
+ }
+
+ // DEPRECATED Kept for backwards compatibility until 3.0 in case a plugin uses them
+
+ Parser.prototype.isKeyword = function isKeyword(word) {
+ return this.keywords.test(word);
+ };
+
+ Parser.prototype.isReservedWord = function isReservedWord(word) {
+ return this.reservedWords.test(word);
+ };
+
+ Parser.prototype.extend = function extend(name, f) {
+ this[name] = f(this[name]);
+ };
+
+ Parser.prototype.loadPlugins = function loadPlugins(pluginConfigs) {
+ for (var _name in pluginConfigs) {
+ var plugin = plugins[_name];
+ if (!plugin) throw new Error("Plugin '" + _name + "' not found");
+ plugin(this, pluginConfigs[_name]);
+ }
+ };
+
+ Parser.prototype.parse = function parse() {
+ var node = this.options.program || this.startNode();
+ this.nextToken();
+ return this.parseTopLevel(node);
+ };
+
+ return Parser;
+})();
+
+exports.Parser = Parser;
+
+},{"./identifier":2,"./options":8,"./tokentype":14,"./whitespace":16}],11:[function(_dereq_,module,exports){
+"use strict";
+
+var _tokentype = _dereq_("./tokentype");
+
+var _state = _dereq_("./state");
+
+var _whitespace = _dereq_("./whitespace");
+
+var pp = _state.Parser.prototype;
+
+// ### Statement parsing
+
+// Parse a program. Initializes the parser, reads any number of
+// statements, and wraps them in a Program node. Optionally takes a
+// `program` argument. If present, the statements will be appended
+// to its body instead of creating a new node.
+
+pp.parseTopLevel = function (node) {
+ var first = true;
+ if (!node.body) node.body = [];
+ while (this.type !== _tokentype.types.eof) {
+ var stmt = this.parseStatement(true, true);
+ node.body.push(stmt);
+ if (first) {
+ if (this.isUseStrict(stmt)) this.setStrict(true);
+ first = false;
+ }
+ }
+ this.next();
+ if (this.options.ecmaVersion >= 6) {
+ node.sourceType = this.options.sourceType;
+ }
+ return this.finishNode(node, "Program");
+};
+
+var loopLabel = { kind: "loop" },
+ switchLabel = { kind: "switch" };
+
+// Parse a single statement.
+//
+// If expecting a statement and finding a slash operator, parse a
+// regular expression literal. This is to handle cases like
+// `if (foo) /blah/.exec(foo)`, where looking at the previous token
+// does not help.
+
+pp.parseStatement = function (declaration, topLevel) {
+ var starttype = this.type,
+ node = this.startNode();
+
+ // Most types of statements are recognized by the keyword they
+ // start with. Many are trivial to parse, some require a bit of
+ // complexity.
+
+ switch (starttype) {
+ case _tokentype.types._break:case _tokentype.types._continue:
+ return this.parseBreakContinueStatement(node, starttype.keyword);
+ case _tokentype.types._debugger:
+ return this.parseDebuggerStatement(node);
+ case _tokentype.types._do:
+ return this.parseDoStatement(node);
+ case _tokentype.types._for:
+ return this.parseForStatement(node);
+ case _tokentype.types._function:
+ if (!declaration && this.options.ecmaVersion >= 6) this.unexpected();
+ return this.parseFunctionStatement(node);
+ case _tokentype.types._class:
+ if (!declaration) this.unexpected();
+ return this.parseClass(node, true);
+ case _tokentype.types._if:
+ return this.parseIfStatement(node);
+ case _tokentype.types._return:
+ return this.parseReturnStatement(node);
+ case _tokentype.types._switch:
+ return this.parseSwitchStatement(node);
+ case _tokentype.types._throw:
+ return this.parseThrowStatement(node);
+ case _tokentype.types._try:
+ return this.parseTryStatement(node);
+ case _tokentype.types._let:case _tokentype.types._const:
+ if (!declaration) this.unexpected(); // NOTE: falls through to _var
+ case _tokentype.types._var:
+ return this.parseVarStatement(node, starttype);
+ case _tokentype.types._while:
+ return this.parseWhileStatement(node);
+ case _tokentype.types._with:
+ return this.parseWithStatement(node);
+ case _tokentype.types.braceL:
+ return this.parseBlock();
+ case _tokentype.types.semi:
+ return this.parseEmptyStatement(node);
+ case _tokentype.types._export:
+ case _tokentype.types._import:
+ if (!this.options.allowImportExportEverywhere) {
+ if (!topLevel) this.raise(this.start, "'import' and 'export' may only appear at the top level");
+ if (!this.inModule) this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'");
+ }
+ return starttype === _tokentype.types._import ? this.parseImport(node) : this.parseExport(node);
+
+ // If the statement does not start with a statement keyword or a
+ // brace, it's an ExpressionStatement or LabeledStatement. We
+ // simply start parsing an expression, and afterwards, if the
+ // next token is a colon and the expression was a simple
+ // Identifier node, we switch to interpreting it as a label.
+ default:
+ var maybeName = this.value,
+ expr = this.parseExpression();
+ if (starttype === _tokentype.types.name && expr.type === "Identifier" && this.eat(_tokentype.types.colon)) return this.parseLabeledStatement(node, maybeName, expr);else return this.parseExpressionStatement(node, expr);
+ }
+};
+
+pp.parseBreakContinueStatement = function (node, keyword) {
+ var isBreak = keyword == "break";
+ this.next();
+ if (this.eat(_tokentype.types.semi) || this.insertSemicolon()) node.label = null;else if (this.type !== _tokentype.types.name) this.unexpected();else {
+ node.label = this.parseIdent();
+ this.semicolon();
+ }
+
+ // Verify that there is an actual destination to break or
+ // continue to.
+ for (var i = 0; i < this.labels.length; ++i) {
+ var lab = this.labels[i];
+ if (node.label == null || lab.name === node.label.name) {
+ if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
+ if (node.label && isBreak) break;
+ }
+ }
+ if (i === this.labels.length) this.raise(node.start, "Unsyntactic " + keyword);
+ return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
+};
+
+pp.parseDebuggerStatement = function (node) {
+ this.next();
+ this.semicolon();
+ return this.finishNode(node, "DebuggerStatement");
+};
+
+pp.parseDoStatement = function (node) {
+ this.next();
+ this.labels.push(loopLabel);
+ node.body = this.parseStatement(false);
+ this.labels.pop();
+ this.expect(_tokentype.types._while);
+ node.test = this.parseParenExpression();
+ if (this.options.ecmaVersion >= 6) this.eat(_tokentype.types.semi);else this.semicolon();
+ return this.finishNode(node, "DoWhileStatement");
+};
+
+// Disambiguating between a `for` and a `for`/`in` or `for`/`of`
+// loop is non-trivial. Basically, we have to parse the init `var`
+// statement or expression, disallowing the `in` operator (see
+// the second parameter to `parseExpression`), and then check
+// whether the next token is `in` or `of`. When there is no init
+// part (semicolon immediately after the opening parenthesis), it
+// is a regular `for` loop.
+
+pp.parseForStatement = function (node) {
+ this.next();
+ this.labels.push(loopLabel);
+ this.expect(_tokentype.types.parenL);
+ if (this.type === _tokentype.types.semi) return this.parseFor(node, null);
+ if (this.type === _tokentype.types._var || this.type === _tokentype.types._let || this.type === _tokentype.types._const) {
+ var _init = this.startNode(),
+ varKind = this.type;
+ this.next();
+ this.parseVar(_init, true, varKind);
+ this.finishNode(_init, "VariableDeclaration");
+ if ((this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) && _init.declarations.length === 1 && !(varKind !== _tokentype.types._var && _init.declarations[0].init)) return this.parseForIn(node, _init);
+ return this.parseFor(node, _init);
+ }
+ var refDestructuringErrors = { shorthandAssign: 0, trailingComma: 0 };
+ var init = this.parseExpression(true, refDestructuringErrors);
+ if (this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of")) {
+ this.checkPatternErrors(refDestructuringErrors, true);
+ this.toAssignable(init);
+ this.checkLVal(init);
+ return this.parseForIn(node, init);
+ } else {
+ this.checkExpressionErrors(refDestructuringErrors, true);
+ }
+ return this.parseFor(node, init);
+};
+
+pp.parseFunctionStatement = function (node) {
+ this.next();
+ return this.parseFunction(node, true);
+};
+
+pp.parseIfStatement = function (node) {
+ this.next();
+ node.test = this.parseParenExpression();
+ node.consequent = this.parseStatement(false);
+ node.alternate = this.eat(_tokentype.types._else) ? this.parseStatement(false) : null;
+ return this.finishNode(node, "IfStatement");
+};
+
+pp.parseReturnStatement = function (node) {
+ if (!this.inFunction && !this.options.allowReturnOutsideFunction) this.raise(this.start, "'return' outside of function");
+ this.next();
+
+ // In `return` (and `break`/`continue`), the keywords with
+ // optional arguments, we eagerly look for a semicolon or the
+ // possibility to insert one.
+
+ if (this.eat(_tokentype.types.semi) || this.insertSemicolon()) node.argument = null;else {
+ node.argument = this.parseExpression();this.semicolon();
+ }
+ return this.finishNode(node, "ReturnStatement");
+};
+
+pp.parseSwitchStatement = function (node) {
+ this.next();
+ node.discriminant = this.parseParenExpression();
+ node.cases = [];
+ this.expect(_tokentype.types.braceL);
+ this.labels.push(switchLabel);
+
+ // Statements under must be grouped (by label) in SwitchCase
+ // nodes. `cur` is used to keep the node that we are currently
+ // adding statements to.
+
+ for (var cur, sawDefault = false; this.type != _tokentype.types.braceR;) {
+ if (this.type === _tokentype.types._case || this.type === _tokentype.types._default) {
+ var isCase = this.type === _tokentype.types._case;
+ if (cur) this.finishNode(cur, "SwitchCase");
+ node.cases.push(cur = this.startNode());
+ cur.consequent = [];
+ this.next();
+ if (isCase) {
+ cur.test = this.parseExpression();
+ } else {
+ if (sawDefault) this.raise(this.lastTokStart, "Multiple default clauses");
+ sawDefault = true;
+ cur.test = null;
+ }
+ this.expect(_tokentype.types.colon);
+ } else {
+ if (!cur) this.unexpected();
+ cur.consequent.push(this.parseStatement(true));
+ }
+ }
+ if (cur) this.finishNode(cur, "SwitchCase");
+ this.next(); // Closing brace
+ this.labels.pop();
+ return this.finishNode(node, "SwitchStatement");
+};
+
+pp.parseThrowStatement = function (node) {
+ this.next();
+ if (_whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) this.raise(this.lastTokEnd, "Illegal newline after throw");
+ node.argument = this.parseExpression();
+ this.semicolon();
+ return this.finishNode(node, "ThrowStatement");
+};
+
+// Reused empty array added for node fields that are always empty.
+
+var empty = [];
+
+pp.parseTryStatement = function (node) {
+ this.next();
+ node.block = this.parseBlock();
+ node.handler = null;
+ if (this.type === _tokentype.types._catch) {
+ var clause = this.startNode();
+ this.next();
+ this.expect(_tokentype.types.parenL);
+ clause.param = this.parseBindingAtom();
+ this.checkLVal(clause.param, true);
+ this.expect(_tokentype.types.parenR);
+ clause.body = this.parseBlock();
+ node.handler = this.finishNode(clause, "CatchClause");
+ }
+ node.finalizer = this.eat(_tokentype.types._finally) ? this.parseBlock() : null;
+ if (!node.handler && !node.finalizer) this.raise(node.start, "Missing catch or finally clause");
+ return this.finishNode(node, "TryStatement");
+};
+
+pp.parseVarStatement = function (node, kind) {
+ this.next();
+ this.parseVar(node, false, kind);
+ this.semicolon();
+ return this.finishNode(node, "VariableDeclaration");
+};
+
+pp.parseWhileStatement = function (node) {
+ this.next();
+ node.test = this.parseParenExpression();
+ this.labels.push(loopLabel);
+ node.body = this.parseStatement(false);
+ this.labels.pop();
+ return this.finishNode(node, "WhileStatement");
+};
+
+pp.parseWithStatement = function (node) {
+ if (this.strict) this.raise(this.start, "'with' in strict mode");
+ this.next();
+ node.object = this.parseParenExpression();
+ node.body = this.parseStatement(false);
+ return this.finishNode(node, "WithStatement");
+};
+
+pp.parseEmptyStatement = function (node) {
+ this.next();
+ return this.finishNode(node, "EmptyStatement");
+};
+
+pp.parseLabeledStatement = function (node, maybeName, expr) {
+ for (var i = 0; i < this.labels.length; ++i) {
+ if (this.labels[i].name === maybeName) this.raise(expr.start, "Label '" + maybeName + "' is already declared");
+ }var kind = this.type.isLoop ? "loop" : this.type === _tokentype.types._switch ? "switch" : null;
+ for (var i = this.labels.length - 1; i >= 0; i--) {
+ var label = this.labels[i];
+ if (label.statementStart == node.start) {
+ label.statementStart = this.start;
+ label.kind = kind;
+ } else break;
+ }
+ this.labels.push({ name: maybeName, kind: kind, statementStart: this.start });
+ node.body = this.parseStatement(true);
+ this.labels.pop();
+ node.label = expr;
+ return this.finishNode(node, "LabeledStatement");
+};
+
+pp.parseExpressionStatement = function (node, expr) {
+ node.expression = expr;
+ this.semicolon();
+ return this.finishNode(node, "ExpressionStatement");
+};
+
+// Parse a semicolon-enclosed block of statements, handling `"use
+// strict"` declarations when `allowStrict` is true (used for
+// function bodies).
+
+pp.parseBlock = function (allowStrict) {
+ var node = this.startNode(),
+ first = true,
+ oldStrict = undefined;
+ node.body = [];
+ this.expect(_tokentype.types.braceL);
+ while (!this.eat(_tokentype.types.braceR)) {
+ var stmt = this.parseStatement(true);
+ node.body.push(stmt);
+ if (first && allowStrict && this.isUseStrict(stmt)) {
+ oldStrict = this.strict;
+ this.setStrict(this.strict = true);
+ }
+ first = false;
+ }
+ if (oldStrict === false) this.setStrict(false);
+ return this.finishNode(node, "BlockStatement");
+};
+
+// Parse a regular `for` loop. The disambiguation code in
+// `parseStatement` will already have parsed the init statement or
+// expression.
+
+pp.parseFor = function (node, init) {
+ node.init = init;
+ this.expect(_tokentype.types.semi);
+ node.test = this.type === _tokentype.types.semi ? null : this.parseExpression();
+ this.expect(_tokentype.types.semi);
+ node.update = this.type === _tokentype.types.parenR ? null : this.parseExpression();
+ this.expect(_tokentype.types.parenR);
+ node.body = this.parseStatement(false);
+ this.labels.pop();
+ return this.finishNode(node, "ForStatement");
+};
+
+// Parse a `for`/`in` and `for`/`of` loop, which are almost
+// same from parser's perspective.
+
+pp.parseForIn = function (node, init) {
+ var type = this.type === _tokentype.types._in ? "ForInStatement" : "ForOfStatement";
+ this.next();
+ node.left = init;
+ node.right = this.parseExpression();
+ this.expect(_tokentype.types.parenR);
+ node.body = this.parseStatement(false);
+ this.labels.pop();
+ return this.finishNode(node, type);
+};
+
+// Parse a list of variable declarations.
+
+pp.parseVar = function (node, isFor, kind) {
+ node.declarations = [];
+ node.kind = kind.keyword;
+ for (;;) {
+ var decl = this.startNode();
+ this.parseVarId(decl);
+ if (this.eat(_tokentype.types.eq)) {
+ decl.init = this.parseMaybeAssign(isFor);
+ } else if (kind === _tokentype.types._const && !(this.type === _tokentype.types._in || this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
+ this.unexpected();
+ } else if (decl.id.type != "Identifier" && !(isFor && (this.type === _tokentype.types._in || this.isContextual("of")))) {
+ this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
+ } else {
+ decl.init = null;
+ }
+ node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
+ if (!this.eat(_tokentype.types.comma)) break;
+ }
+ return node;
+};
+
+pp.parseVarId = function (decl) {
+ decl.id = this.parseBindingAtom();
+ this.checkLVal(decl.id, true);
+};
+
+// Parse a function declaration or literal (depending on the
+// `isStatement` parameter).
+
+pp.parseFunction = function (node, isStatement, allowExpressionBody) {
+ this.initFunction(node);
+ if (this.options.ecmaVersion >= 6) node.generator = this.eat(_tokentype.types.star);
+ if (isStatement || this.type === _tokentype.types.name) node.id = this.parseIdent();
+ this.parseFunctionParams(node);
+ this.parseFunctionBody(node, allowExpressionBody);
+ return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");
+};
+
+pp.parseFunctionParams = function (node) {
+ this.expect(_tokentype.types.parenL);
+ node.params = this.parseBindingList(_tokentype.types.parenR, false, false, true);
+};
+
+// Parse a class declaration or literal (depending on the
+// `isStatement` parameter).
+
+pp.parseClass = function (node, isStatement) {
+ this.next();
+ this.parseClassId(node, isStatement);
+ this.parseClassSuper(node);
+ var classBody = this.startNode();
+ var hadConstructor = false;
+ classBody.body = [];
+ this.expect(_tokentype.types.braceL);
+ while (!this.eat(_tokentype.types.braceR)) {
+ if (this.eat(_tokentype.types.semi)) continue;
+ var method = this.startNode();
+ var isGenerator = this.eat(_tokentype.types.star);
+ var isMaybeStatic = this.type === _tokentype.types.name && this.value === "static";
+ this.parsePropertyName(method);
+ method["static"] = isMaybeStatic && this.type !== _tokentype.types.parenL;
+ if (method["static"]) {
+ if (isGenerator) this.unexpected();
+ isGenerator = this.eat(_tokentype.types.star);
+ this.parsePropertyName(method);
+ }
+ method.kind = "method";
+ var isGetSet = false;
+ if (!method.computed) {
+ var key = method.key;
+
+ if (!isGenerator && key.type === "Identifier" && this.type !== _tokentype.types.parenL && (key.name === "get" || key.name === "set")) {
+ isGetSet = true;
+ method.kind = key.name;
+ key = this.parsePropertyName(method);
+ }
+ if (!method["static"] && (key.type === "Identifier" && key.name === "constructor" || key.type === "Literal" && key.value === "constructor")) {
+ if (hadConstructor) this.raise(key.start, "Duplicate constructor in the same class");
+ if (isGetSet) this.raise(key.start, "Constructor can't have get/set modifier");
+ if (isGenerator) this.raise(key.start, "Constructor can't be a generator");
+ method.kind = "constructor";
+ hadConstructor = true;
+ }
+ }
+ this.parseClassMethod(classBody, method, isGenerator);
+ if (isGetSet) {
+ var paramCount = method.kind === "get" ? 0 : 1;
+ if (method.value.params.length !== paramCount) {
+ var start = method.value.start;
+ if (method.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param");
+ }
+ if (method.kind === "set" && method.value.params[0].type === "RestElement") this.raise(method.value.params[0].start, "Setter cannot use rest params");
+ }
+ }
+ node.body = this.finishNode(classBody, "ClassBody");
+ return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
+};
+
+pp.parseClassMethod = function (classBody, method, isGenerator) {
+ method.value = this.parseMethod(isGenerator);
+ classBody.body.push(this.finishNode(method, "MethodDefinition"));
+};
+
+pp.parseClassId = function (node, isStatement) {
+ node.id = this.type === _tokentype.types.name ? this.parseIdent() : isStatement ? this.unexpected() : null;
+};
+
+pp.parseClassSuper = function (node) {
+ node.superClass = this.eat(_tokentype.types._extends) ? this.parseExprSubscripts() : null;
+};
+
+// Parses module export declaration.
+
+pp.parseExport = function (node) {
+ this.next();
+ // export * from '...'
+ if (this.eat(_tokentype.types.star)) {
+ this.expectContextual("from");
+ node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected();
+ this.semicolon();
+ return this.finishNode(node, "ExportAllDeclaration");
+ }
+ if (this.eat(_tokentype.types._default)) {
+ // export default ...
+ var expr = this.parseMaybeAssign();
+ var needsSemi = true;
+ if (expr.type == "FunctionExpression" || expr.type == "ClassExpression") {
+ needsSemi = false;
+ if (expr.id) {
+ expr.type = expr.type == "FunctionExpression" ? "FunctionDeclaration" : "ClassDeclaration";
+ }
+ }
+ node.declaration = expr;
+ if (needsSemi) this.semicolon();
+ return this.finishNode(node, "ExportDefaultDeclaration");
+ }
+ // export var|const|let|function|class ...
+ if (this.shouldParseExportStatement()) {
+ node.declaration = this.parseStatement(true);
+ node.specifiers = [];
+ node.source = null;
+ } else {
+ // export { x, y as z } [from '...']
+ node.declaration = null;
+ node.specifiers = this.parseExportSpecifiers();
+ if (this.eatContextual("from")) {
+ node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected();
+ } else {
+ // check for keywords used as local names
+ for (var i = 0; i < node.specifiers.length; i++) {
+ if (this.keywords.test(node.specifiers[i].local.name) || this.reservedWords.test(node.specifiers[i].local.name)) {
+ this.unexpected(node.specifiers[i].local.start);
+ }
+ }
+
+ node.source = null;
+ }
+ this.semicolon();
+ }
+ return this.finishNode(node, "ExportNamedDeclaration");
+};
+
+pp.shouldParseExportStatement = function () {
+ return this.type.keyword;
+};
+
+// Parses a comma-separated list of module exports.
+
+pp.parseExportSpecifiers = function () {
+ var nodes = [],
+ first = true;
+ // export { x, y as z } [from '...']
+ this.expect(_tokentype.types.braceL);
+ while (!this.eat(_tokentype.types.braceR)) {
+ if (!first) {
+ this.expect(_tokentype.types.comma);
+ if (this.afterTrailingComma(_tokentype.types.braceR)) break;
+ } else first = false;
+
+ var node = this.startNode();
+ node.local = this.parseIdent(this.type === _tokentype.types._default);
+ node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;
+ nodes.push(this.finishNode(node, "ExportSpecifier"));
+ }
+ return nodes;
+};
+
+// Parses import declaration.
+
+pp.parseImport = function (node) {
+ this.next();
+ // import '...'
+ if (this.type === _tokentype.types.string) {
+ node.specifiers = empty;
+ node.source = this.parseExprAtom();
+ } else {
+ node.specifiers = this.parseImportSpecifiers();
+ this.expectContextual("from");
+ node.source = this.type === _tokentype.types.string ? this.parseExprAtom() : this.unexpected();
+ }
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+};
+
+// Parses a comma-separated list of module imports.
+
+pp.parseImportSpecifiers = function () {
+ var nodes = [],
+ first = true;
+ if (this.type === _tokentype.types.name) {
+ // import defaultObj, { x, y as z } from '...'
+ var node = this.startNode();
+ node.local = this.parseIdent();
+ this.checkLVal(node.local, true);
+ nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
+ if (!this.eat(_tokentype.types.comma)) return nodes;
+ }
+ if (this.type === _tokentype.types.star) {
+ var node = this.startNode();
+ this.next();
+ this.expectContextual("as");
+ node.local = this.parseIdent();
+ this.checkLVal(node.local, true);
+ nodes.push(this.finishNode(node, "ImportNamespaceSpecifier"));
+ return nodes;
+ }
+ this.expect(_tokentype.types.braceL);
+ while (!this.eat(_tokentype.types.braceR)) {
+ if (!first) {
+ this.expect(_tokentype.types.comma);
+ if (this.afterTrailingComma(_tokentype.types.braceR)) break;
+ } else first = false;
+
+ var node = this.startNode();
+ node.imported = this.parseIdent(true);
+ if (this.eatContextual("as")) {
+ node.local = this.parseIdent();
+ } else {
+ node.local = node.imported;
+ if (this.isKeyword(node.local.name)) this.unexpected(node.local.start);
+ if (this.reservedWordsStrict.test(node.local.name)) this.raise(node.local.start, "The keyword '" + node.local.name + "' is reserved");
+ }
+ this.checkLVal(node.local, true);
+ nodes.push(this.finishNode(node, "ImportSpecifier"));
+ }
+ return nodes;
+};
+
+},{"./state":10,"./tokentype":14,"./whitespace":16}],12:[function(_dereq_,module,exports){
+// The algorithm used to determine whether a regexp can appear at a
+// given point in the program is loosely based on sweet.js' approach.
+// See https://github.com/mozilla/sweet.js/wiki/design
+
+"use strict";
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _state = _dereq_("./state");
+
+var _tokentype = _dereq_("./tokentype");
+
+var _whitespace = _dereq_("./whitespace");
+
+var TokContext = function TokContext(token, isExpr, preserveSpace, override) {
+ _classCallCheck(this, TokContext);
+
+ this.token = token;
+ this.isExpr = !!isExpr;
+ this.preserveSpace = !!preserveSpace;
+ this.override = override;
+};
+
+exports.TokContext = TokContext;
+var types = {
+ b_stat: new TokContext("{", false),
+ b_expr: new TokContext("{", true),
+ b_tmpl: new TokContext("${", true),
+ p_stat: new TokContext("(", false),
+ p_expr: new TokContext("(", true),
+ q_tmpl: new TokContext("`", true, true, function (p) {
+ return p.readTmplToken();
+ }),
+ f_expr: new TokContext("function", true)
+};
+
+exports.types = types;
+var pp = _state.Parser.prototype;
+
+pp.initialContext = function () {
+ return [types.b_stat];
+};
+
+pp.braceIsBlock = function (prevType) {
+ if (prevType === _tokentype.types.colon) {
+ var _parent = this.curContext();
+ if (_parent === types.b_stat || _parent === types.b_expr) return !_parent.isExpr;
+ }
+ if (prevType === _tokentype.types._return) return _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.start));
+ if (prevType === _tokentype.types._else || prevType === _tokentype.types.semi || prevType === _tokentype.types.eof || prevType === _tokentype.types.parenR) return true;
+ if (prevType == _tokentype.types.braceL) return this.curContext() === types.b_stat;
+ return !this.exprAllowed;
+};
+
+pp.updateContext = function (prevType) {
+ var update = undefined,
+ type = this.type;
+ if (type.keyword && prevType == _tokentype.types.dot) this.exprAllowed = false;else if (update = type.updateContext) update.call(this, prevType);else this.exprAllowed = type.beforeExpr;
+};
+
+// Token-specific context update code
+
+_tokentype.types.parenR.updateContext = _tokentype.types.braceR.updateContext = function () {
+ if (this.context.length == 1) {
+ this.exprAllowed = true;
+ return;
+ }
+ var out = this.context.pop();
+ if (out === types.b_stat && this.curContext() === types.f_expr) {
+ this.context.pop();
+ this.exprAllowed = false;
+ } else if (out === types.b_tmpl) {
+ this.exprAllowed = true;
+ } else {
+ this.exprAllowed = !out.isExpr;
+ }
+};
+
+_tokentype.types.braceL.updateContext = function (prevType) {
+ this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);
+ this.exprAllowed = true;
+};
+
+_tokentype.types.dollarBraceL.updateContext = function () {
+ this.context.push(types.b_tmpl);
+ this.exprAllowed = true;
+};
+
+_tokentype.types.parenL.updateContext = function (prevType) {
+ var statementParens = prevType === _tokentype.types._if || prevType === _tokentype.types._for || prevType === _tokentype.types._with || prevType === _tokentype.types._while;
+ this.context.push(statementParens ? types.p_stat : types.p_expr);
+ this.exprAllowed = true;
+};
+
+_tokentype.types.incDec.updateContext = function () {
+ // tokExprAllowed stays unchanged
+};
+
+_tokentype.types._function.updateContext = function () {
+ if (this.curContext() !== types.b_stat) this.context.push(types.f_expr);
+ this.exprAllowed = false;
+};
+
+_tokentype.types.backQuote.updateContext = function () {
+ if (this.curContext() === types.q_tmpl) this.context.pop();else this.context.push(types.q_tmpl);
+ this.exprAllowed = false;
+};
+
+},{"./state":10,"./tokentype":14,"./whitespace":16}],13:[function(_dereq_,module,exports){
+"use strict";
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var _identifier = _dereq_("./identifier");
+
+var _tokentype = _dereq_("./tokentype");
+
+var _state = _dereq_("./state");
+
+var _locutil = _dereq_("./locutil");
+
+var _whitespace = _dereq_("./whitespace");
+
+// Object type used to represent tokens. Note that normally, tokens
+// simply exist as properties on the parser object. This is only
+// used for the onToken callback and the external tokenizer.
+
+var Token = function Token(p) {
+ _classCallCheck(this, Token);
+
+ this.type = p.type;
+ this.value = p.value;
+ this.start = p.start;
+ this.end = p.end;
+ if (p.options.locations) this.loc = new _locutil.SourceLocation(p, p.startLoc, p.endLoc);
+ if (p.options.ranges) this.range = [p.start, p.end];
+}
+
+// ## Tokenizer
+
+;
+
+exports.Token = Token;
+var pp = _state.Parser.prototype;
+
+// Are we running under Rhino?
+var isRhino = typeof Packages == "object" && Object.prototype.toString.call(Packages) == "[object JavaPackage]";
+
+// Move to the next token
+
+pp.next = function () {
+ if (this.options.onToken) this.options.onToken(new Token(this));
+
+ this.lastTokEnd = this.end;
+ this.lastTokStart = this.start;
+ this.lastTokEndLoc = this.endLoc;
+ this.lastTokStartLoc = this.startLoc;
+ this.nextToken();
+};
+
+pp.getToken = function () {
+ this.next();
+ return new Token(this);
+};
+
+// If we're in an ES6 environment, make parsers iterable
+if (typeof Symbol !== "undefined") pp[Symbol.iterator] = function () {
+ var self = this;
+ return { next: function next() {
+ var token = self.getToken();
+ return {
+ done: token.type === _tokentype.types.eof,
+ value: token
+ };
+ } };
+};
+
+// Toggle strict mode. Re-reads the next number or string to please
+// pedantic tests (`"use strict"; 010;` should fail).
+
+pp.setStrict = function (strict) {
+ this.strict = strict;
+ if (this.type !== _tokentype.types.num && this.type !== _tokentype.types.string) return;
+ this.pos = this.start;
+ if (this.options.locations) {
+ while (this.pos < this.lineStart) {
+ this.lineStart = this.input.lastIndexOf("\n", this.lineStart - 2) + 1;
+ --this.curLine;
+ }
+ }
+ this.nextToken();
+};
+
+pp.curContext = function () {
+ return this.context[this.context.length - 1];
+};
+
+// Read a single token, updating the parser object's token-related
+// properties.
+
+pp.nextToken = function () {
+ var curContext = this.curContext();
+ if (!curContext || !curContext.preserveSpace) this.skipSpace();
+
+ this.start = this.pos;
+ if (this.options.locations) this.startLoc = this.curPosition();
+ if (this.pos >= this.input.length) return this.finishToken(_tokentype.types.eof);
+
+ if (curContext.override) return curContext.override(this);else this.readToken(this.fullCharCodeAtPos());
+};
+
+pp.readToken = function (code) {
+ // Identifier or keyword. '\uXXXX' sequences are allowed in
+ // identifiers, so '\' also dispatches to that.
+ if (_identifier.isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */) return this.readWord();
+
+ return this.getTokenFromCode(code);
+};
+
+pp.fullCharCodeAtPos = function () {
+ var code = this.input.charCodeAt(this.pos);
+ if (code <= 0xd7ff || code >= 0xe000) return code;
+ var next = this.input.charCodeAt(this.pos + 1);
+ return (code << 10) + next - 0x35fdc00;
+};
+
+pp.skipBlockComment = function () {
+ var startLoc = this.options.onComment && this.curPosition();
+ var start = this.pos,
+ end = this.input.indexOf("*/", this.pos += 2);
+ if (end === -1) this.raise(this.pos - 2, "Unterminated comment");
+ this.pos = end + 2;
+ if (this.options.locations) {
+ _whitespace.lineBreakG.lastIndex = start;
+ var match = undefined;
+ while ((match = _whitespace.lineBreakG.exec(this.input)) && match.index < this.pos) {
+ ++this.curLine;
+ this.lineStart = match.index + match[0].length;
+ }
+ }
+ if (this.options.onComment) this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());
+};
+
+pp.skipLineComment = function (startSkip) {
+ var start = this.pos;
+ var startLoc = this.options.onComment && this.curPosition();
+ var ch = this.input.charCodeAt(this.pos += startSkip);
+ while (this.pos < this.input.length && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {
+ ++this.pos;
+ ch = this.input.charCodeAt(this.pos);
+ }
+ if (this.options.onComment) this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());
+};
+
+// Called at the start of the parse and after every token. Skips
+// whitespace and comments, and.
+
+pp.skipSpace = function () {
+ loop: while (this.pos < this.input.length) {
+ var ch = this.input.charCodeAt(this.pos);
+ switch (ch) {
+ case 32:case 160:
+ // ' '
+ ++this.pos;
+ break;
+ case 13:
+ if (this.input.charCodeAt(this.pos + 1) === 10) {
+ ++this.pos;
+ }
+ case 10:case 8232:case 8233:
+ ++this.pos;
+ if (this.options.locations) {
+ ++this.curLine;
+ this.lineStart = this.pos;
+ }
+ break;
+ case 47:
+ // '/'
+ switch (this.input.charCodeAt(this.pos + 1)) {
+ case 42:
+ // '*'
+ this.skipBlockComment();
+ break;
+ case 47:
+ this.skipLineComment(2);
+ break;
+ default:
+ break loop;
+ }
+ break;
+ default:
+ if (ch > 8 && ch < 14 || ch >= 5760 && _whitespace.nonASCIIwhitespace.test(String.fromCharCode(ch))) {
+ ++this.pos;
+ } else {
+ break loop;
+ }
+ }
+ }
+};
+
+// Called at the end of every token. Sets `end`, `val`, and
+// maintains `context` and `exprAllowed`, and skips the space after
+// the token, so that the next one's `start` will point at the
+// right position.
+
+pp.finishToken = function (type, val) {
+ this.end = this.pos;
+ if (this.options.locations) this.endLoc = this.curPosition();
+ var prevType = this.type;
+ this.type = type;
+ this.value = val;
+
+ this.updateContext(prevType);
+};
+
+// ### Token reading
+
+// This is the function that is called to fetch the next token. It
+// is somewhat obscure, because it works in character codes rather
+// than characters, and because operator parsing has been inlined
+// into it.
+//
+// All in the name of speed.
+//
+pp.readToken_dot = function () {
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (next >= 48 && next <= 57) return this.readNumber(true);
+ var next2 = this.input.charCodeAt(this.pos + 2);
+ if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {
+ // 46 = dot '.'
+ this.pos += 3;
+ return this.finishToken(_tokentype.types.ellipsis);
+ } else {
+ ++this.pos;
+ return this.finishToken(_tokentype.types.dot);
+ }
+};
+
+pp.readToken_slash = function () {
+ // '/'
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (this.exprAllowed) {
+ ++this.pos;return this.readRegexp();
+ }
+ if (next === 61) return this.finishOp(_tokentype.types.assign, 2);
+ return this.finishOp(_tokentype.types.slash, 1);
+};
+
+pp.readToken_mult_modulo = function (code) {
+ // '%*'
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (next === 61) return this.finishOp(_tokentype.types.assign, 2);
+ return this.finishOp(code === 42 ? _tokentype.types.star : _tokentype.types.modulo, 1);
+};
+
+pp.readToken_pipe_amp = function (code) {
+ // '|&'
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (next === code) return this.finishOp(code === 124 ? _tokentype.types.logicalOR : _tokentype.types.logicalAND, 2);
+ if (next === 61) return this.finishOp(_tokentype.types.assign, 2);
+ return this.finishOp(code === 124 ? _tokentype.types.bitwiseOR : _tokentype.types.bitwiseAND, 1);
+};
+
+pp.readToken_caret = function () {
+ // '^'
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (next === 61) return this.finishOp(_tokentype.types.assign, 2);
+ return this.finishOp(_tokentype.types.bitwiseXOR, 1);
+};
+
+pp.readToken_plus_min = function (code) {
+ // '+-'
+ var next = this.input.charCodeAt(this.pos + 1);
+ if (next === code) {
+ if (next == 45 && this.input.charCodeAt(this.pos + 2) == 62 && _whitespace.lineBreak.test(this.input.slice(this.lastTokEnd, this.pos))) {
+ // A `-->` line comment
+ this.skipLineComment(3);
+ this.skipSpace();
+ return this.nextToken();
+ }
+ return this.finishOp(_tokentype.types.incDec, 2);
+ }
+ if (next === 61) return this.finishOp(_tokentype.types.assign, 2);
+ return this.finishOp(_tokentype.types.plusMin, 1);
+};
+
+pp.readToken_lt_gt = function (code) {
+ // '<>'
+ var next = this.input.charCodeAt(this.pos + 1);
+ var size = 1;
+ if (next === code) {
+ size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
+ if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(_tokentype.types.assign, size + 1);
+ return this.finishOp(_tokentype.types.bitShift, size);
+ }
+ if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 && this.input.charCodeAt(this.pos + 3) == 45) {
+ if (this.inModule) this.unexpected();
+ // `` line comment
+ this.skipLineComment(3)
+ this.skipSpace()
+ return this.nextToken()
+ }
+ return this.finishOp(tt.incDec, 2)
+ }
+ if (next === 61) return this.finishOp(tt.assign, 2)
+ return this.finishOp(tt.plusMin, 1)
+}
+
+pp.readToken_lt_gt = function(code) { // '<>'
+ let next = this.input.charCodeAt(this.pos + 1)
+ let size = 1
+ if (next === code) {
+ size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2
+ if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp(tt.assign, size + 1)
+ return this.finishOp(tt.bitShift, size)
+ }
+ if (next == 33 && code == 60 && this.input.charCodeAt(this.pos + 2) == 45 &&
+ this.input.charCodeAt(this.pos + 3) == 45) {
+ if (this.inModule) this.unexpected()
+ // `
+
+```js
+var bodyParser = require('body-parser')
+```
+
+The `bodyParser` object exposes various factories to create middlewares. All
+middlewares will populate the `req.body` property with the parsed body, or an
+empty object (`{}`) if there was no body to parse (or an error was returned).
+
+The various errors returned by this module are described in the
+[errors section](#errors).
+
+### bodyParser.json(options)
+
+Returns middleware that only parses `json`. This parser accepts any Unicode
+encoding of the body and supports automatic inflation of `gzip` and `deflate`
+encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`).
+
+#### Options
+
+The `json` function takes an option `options` object that may contain any of
+the following keys:
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### reviver
+
+The `reviver` option is passed directly to `JSON.parse` as the second
+argument. You can find more information on this argument
+[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
+
+##### strict
+
+When set to `true`, will only accept arrays and objects; when `false` will
+accept anything `JSON.parse` accepts. Defaults to `true`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a function or a string. If a string, `type` option
+is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme)
+library and this can be an extension name (like `json`), a mime type (like
+`application/json`), or a mime type with a wildcard (like `*/*` or `*/json`).
+If a function, the `type` option is called as `fn(req)` and the request is
+parsed if it returns a truthy value. Defaults to `application/json`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.raw(options)
+
+Returns middleware that parses all bodies as a `Buffer`. This parser
+supports automatic inflation of `gzip` and `deflate` encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This will be a `Buffer` object
+of the body.
+
+#### Options
+
+The `raw` function takes an option `options` object that may contain any of
+the following keys:
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a function or a string. If a string, `type` option
+is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme)
+library and this can be an extension name (like `bin`), a mime type (like
+`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
+`application/*`). If a function, the `type` option is called as `fn(req)`
+and the request is parsed if it returns a truthy value. Defaults to
+`application/octet-stream`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.text(options)
+
+Returns middleware that parses all bodies as a string. This parser supports
+automatic inflation of `gzip` and `deflate` encodings.
+
+A new `body` string containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This will be a string of the
+body.
+
+#### Options
+
+The `text` function takes an option `options` object that may contain any of
+the following keys:
+
+##### defaultCharset
+
+Specify the default character set for the text content if the charset is not
+specified in the `Content-Type` header of the request. Defaults to `utf-8`.
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a function or a string. If a string, `type` option
+is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme)
+library and this can be an extension name (like `txt`), a mime type (like
+`text/plain`), or a mime type with a wildcard (like `*/*` or `text/*`).
+If a function, the `type` option is called as `fn(req)` and the request is
+parsed if it returns a truthy value. Defaults to `text/plain`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+### bodyParser.urlencoded(options)
+
+Returns middleware that only parses `urlencoded` bodies. This parser accepts
+only UTF-8 encoding of the body and supports automatic inflation of `gzip`
+and `deflate` encodings.
+
+A new `body` object containing the parsed data is populated on the `request`
+object after the middleware (i.e. `req.body`). This object will contain
+key-value pairs, where the value can be a string or array (when `extended` is
+`false`), or any type (when `extended` is `true`).
+
+#### Options
+
+The `urlencoded` function takes an option `options` object that may contain
+any of the following keys:
+
+##### extended
+
+The `extended` option allows to choose between parsing the URL-encoded data
+with the `querystring` library (when `false`) or the `qs` library (when
+`true`). The "extended" syntax allows for rich objects and arrays to be
+encoded into the URL-encoded format, allowing for a JSON-like experience
+with URL-encoded. For more information, please
+[see the qs library](https://www.npmjs.org/package/qs#readme).
+
+Defaults to `true`, but using the default has been deprecated. Please
+research into the difference between `qs` and `querystring` and choose the
+appropriate setting.
+
+##### inflate
+
+When set to `true`, then deflated (compressed) bodies will be inflated; when
+`false`, deflated bodies are rejected. Defaults to `true`.
+
+##### limit
+
+Controls the maximum request body size. If this is a number, then the value
+specifies the number of bytes; if it is a string, the value is passed to the
+[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
+to `'100kb'`.
+
+##### parameterLimit
+
+The `parameterLimit` option controls the maximum number of parameters that
+are allowed in the URL-encoded data. If a request contains more parameters
+than this value, a 413 will be returned to the client. Defaults to `1000`.
+
+##### type
+
+The `type` option is used to determine what media type the middleware will
+parse. This option can be a function or a string. If a string, `type` option
+is passed directly to the [type-is](https://www.npmjs.org/package/type-is#readme)
+library and this can be an extension name (like `urlencoded`), a mime type (like
+`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
+`*/x-www-form-urlencoded`). If a function, the `type` option is called as
+`fn(req)` and the request is parsed if it returns a truthy value. Defaults
+to `application/x-www-form-urlencoded`.
+
+##### verify
+
+The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
+where `buf` is a `Buffer` of the raw request body and `encoding` is the
+encoding of the request. The parsing can be aborted by throwing an error.
+
+## Errors
+
+The middlewares provided by this module create errors depending on the error
+condition during parsing. The errors will typically have a `status` property
+that contains the suggested HTTP response code and a `body` property containing
+the read body, if available.
+
+The following are the common errors emitted, though any error can come through
+for various reasons.
+
+### content encoding unsupported
+
+This error will occur when the request had a `Content-Encoding` header that
+contained an encoding but the "inflation" option was set to `false`. The
+`status` property is set to `415`.
+
+### request aborted
+
+This error will occur when the request is aborted by the client before reading
+the body has finished. The `received` property will be set to the number of
+bytes received before the request was aborted and the `expected` property is
+set to the number of expected bytes. The `status` property is set to `400`.
+
+### request entity too large
+
+This error will occur when the request body's size is larger than the "limit"
+option. The `limit` property will be set to the byte limit and the `length`
+property will be set to the request body's length. The `status` property is
+set to `413`.
+
+### request size did not match content length
+
+This error will occur when the request's length did not match the length from
+the `Content-Length` header. This typically occurs when the request is malformed,
+typically when the `Content-Length` header was calculated based on characters
+instead of bytes. The `status` property is set to `400`.
+
+### stream encoding should not be set
+
+This error will occur when something called the `req.setEncoding` method prior
+to this middleware. This module operates directly on bytes only and you cannot
+call `req.setEncoding` when using this module. The `status` property is set to
+`500`.
+
+### unsupported charset "BOGUS"
+
+This error will occur when the request had a charset parameter in the
+`Content-Type` header, but the `iconv-lite` module does not support it OR the
+parser does not support it. The charset is contained in the message as well
+as in the `charset` property. The `status` property is set to `415`.
+
+### unsupported content encoding "bogus"
+
+This error will occur when the request had a `Content-Encoding` header that
+contained an unsupported encoding. The encoding is contained in the message
+as well as in the `encoding` property. The `status` property is set to `415`.
+
+## Examples
+
+### Express/Connect top-level generic
+
+This example demonstrates adding a generic JSON and URL-encoded parser as a
+top-level middleware, which will parse the bodies of all incoming requests.
+This is the simplest setup.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// parse application/x-www-form-urlencoded
+app.use(bodyParser.urlencoded({ extended: false }))
+
+// parse application/json
+app.use(bodyParser.json())
+
+app.use(function (req, res) {
+ res.setHeader('Content-Type', 'text/plain')
+ res.write('you posted:\n')
+ res.end(JSON.stringify(req.body, null, 2))
+})
+```
+
+### Express route-specific
+
+This example demonstrates adding body parsers specifically to the routes that
+need them. In general, this is the most recommended way to use body-parser with
+Express.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// create application/json parser
+var jsonParser = bodyParser.json()
+
+// create application/x-www-form-urlencoded parser
+var urlencodedParser = bodyParser.urlencoded({ extended: false })
+
+// POST /login gets urlencoded bodies
+app.post('/login', urlencodedParser, function (req, res) {
+ if (!req.body) return res.sendStatus(400)
+ res.send('welcome, ' + req.body.username)
+})
+
+// POST /api/users gets JSON bodies
+app.post('/api/users', jsonParser, function (req, res) {
+ if (!req.body) return res.sendStatus(400)
+ // create user in req.body
+})
+```
+
+### Change accepted type for parsers
+
+All the parsers accept a `type` option which allows you to change the
+`Content-Type` that the middleware will parse.
+
+```js
+var express = require('express')
+var bodyParser = require('body-parser')
+
+var app = express()
+
+// parse various different custom JSON types as JSON
+app.use(bodyParser.json({ type: 'application/*+json' }))
+
+// parse some custom thing into a Buffer
+app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
+
+// parse an HTML body into a string
+app.use(bodyParser.text({ type: 'text/html' }))
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/body-parser.svg
+[npm-url]: https://npmjs.org/package/body-parser
+[travis-image]: https://img.shields.io/travis/expressjs/body-parser/master.svg
+[travis-url]: https://travis-ci.org/expressjs/body-parser
+[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg
+[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg
+[downloads-url]: https://npmjs.org/package/body-parser
+[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg
+[gratipay-url]: https://www.gratipay.com/dougwilson/
diff --git a/node_modules/body-parser/index.js b/node_modules/body-parser/index.js
new file mode 100644
index 0000000..93c3a1f
--- /dev/null
+++ b/node_modules/body-parser/index.js
@@ -0,0 +1,157 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var deprecate = require('depd')('body-parser')
+
+/**
+ * Cache of loaded parsers.
+ * @private
+ */
+
+var parsers = Object.create(null)
+
+/**
+ * @typedef Parsers
+ * @type {function}
+ * @property {function} json
+ * @property {function} raw
+ * @property {function} text
+ * @property {function} urlencoded
+ */
+
+/**
+ * Module exports.
+ * @type {Parsers}
+ */
+
+exports = module.exports = deprecate.function(bodyParser,
+ 'bodyParser: use individual json/urlencoded middlewares')
+
+/**
+ * JSON parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'json', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('json')
+})
+
+/**
+ * Raw parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'raw', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('raw')
+})
+
+/**
+ * Text parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'text', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('text')
+})
+
+/**
+ * URL-encoded parser.
+ * @public
+ */
+
+Object.defineProperty(exports, 'urlencoded', {
+ configurable: true,
+ enumerable: true,
+ get: createParserGetter('urlencoded')
+})
+
+/**
+ * Create a middleware to parse json and urlencoded bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @deprecated
+ * @public
+ */
+
+function bodyParser (options) {
+ var opts = {}
+
+ // exclude type option
+ if (options) {
+ for (var prop in options) {
+ if (prop !== 'type') {
+ opts[prop] = options[prop]
+ }
+ }
+ }
+
+ var _urlencoded = exports.urlencoded(opts)
+ var _json = exports.json(opts)
+
+ return function bodyParser (req, res, next) {
+ _json(req, res, function (err) {
+ if (err) return next(err)
+ _urlencoded(req, res, next)
+ })
+ }
+}
+
+/**
+ * Create a getter for loading a parser.
+ * @private
+ */
+
+function createParserGetter (name) {
+ return function get () {
+ return loadParser(name)
+ }
+}
+
+/**
+ * Load a parser module.
+ * @private
+ */
+
+function loadParser (parserName) {
+ var parser = parsers[parserName]
+
+ if (parser !== undefined) {
+ return parser
+ }
+
+ // this uses a switch for static require analysis
+ switch (parserName) {
+ case 'json':
+ parser = require('./lib/types/json')
+ break
+ case 'raw':
+ parser = require('./lib/types/raw')
+ break
+ case 'text':
+ parser = require('./lib/types/text')
+ break
+ case 'urlencoded':
+ parser = require('./lib/types/urlencoded')
+ break
+ }
+
+ // store to prevent invoking require()
+ return (parsers[parserName] = parser)
+}
diff --git a/node_modules/body-parser/lib/read.js b/node_modules/body-parser/lib/read.js
new file mode 100644
index 0000000..3c0fe93
--- /dev/null
+++ b/node_modules/body-parser/lib/read.js
@@ -0,0 +1,188 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var createError = require('http-errors')
+var getBody = require('raw-body')
+var iconv = require('iconv-lite')
+var onFinished = require('on-finished')
+var zlib = require('zlib')
+
+/**
+ * Module exports.
+ */
+
+module.exports = read
+
+/**
+ * Read a request into a buffer and parse.
+ *
+ * @param {object} req
+ * @param {object} res
+ * @param {function} next
+ * @param {function} parse
+ * @param {function} debug
+ * @param {object} [options]
+ * @api private
+ */
+
+function read (req, res, next, parse, debug, options) {
+ var length
+ var opts = options || {}
+ var stream
+
+ // flag as parsed
+ req._body = true
+
+ // read options
+ var encoding = opts.encoding !== null
+ ? opts.encoding || 'utf-8'
+ : null
+ var verify = opts.verify
+
+ try {
+ // get the content stream
+ stream = contentstream(req, debug, opts.inflate)
+ length = stream.length
+ stream.length = undefined
+ } catch (err) {
+ return next(err)
+ }
+
+ // set raw-body options
+ opts.length = length
+ opts.encoding = verify
+ ? null
+ : encoding
+
+ // assert charset is supported
+ if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
+ return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
+ charset: encoding.toLowerCase()
+ }))
+ }
+
+ // read body
+ debug('read body')
+ getBody(stream, opts, function (err, body) {
+ if (err) {
+ // default to 400
+ setErrorStatus(err, 400)
+
+ // echo back charset
+ if (err.type === 'encoding.unsupported') {
+ err = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
+ charset: encoding.toLowerCase()
+ })
+ }
+
+ // read off entire request
+ stream.resume()
+ onFinished(req, function onfinished () {
+ next(err)
+ })
+ return
+ }
+
+ // verify
+ if (verify) {
+ try {
+ debug('verify body')
+ verify(req, res, body, encoding)
+ } catch (err) {
+ // default to 403
+ setErrorStatus(err, 403)
+ next(err)
+ return
+ }
+ }
+
+ // parse
+ var str
+ try {
+ debug('parse body')
+ str = typeof body !== 'string' && encoding !== null
+ ? iconv.decode(body, encoding)
+ : body
+ req.body = parse(str)
+ } catch (err) {
+ err.body = str === undefined
+ ? body
+ : str
+
+ // default to 400
+ setErrorStatus(err, 400)
+
+ next(err)
+ return
+ }
+
+ next()
+ })
+}
+
+/**
+ * Get the content stream of the request.
+ *
+ * @param {object} req
+ * @param {function} debug
+ * @param {boolean} [inflate=true]
+ * @return {object}
+ * @api private
+ */
+
+function contentstream (req, debug, inflate) {
+ var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
+ var length = req.headers['content-length']
+ var stream
+
+ debug('content-encoding "%s"', encoding)
+
+ if (inflate === false && encoding !== 'identity') {
+ throw createError(415, 'content encoding unsupported')
+ }
+
+ switch (encoding) {
+ case 'deflate':
+ stream = zlib.createInflate()
+ debug('inflate body')
+ req.pipe(stream)
+ break
+ case 'gzip':
+ stream = zlib.createGunzip()
+ debug('gunzip body')
+ req.pipe(stream)
+ break
+ case 'identity':
+ stream = req
+ stream.length = length
+ break
+ default:
+ throw createError(415, 'unsupported content encoding "' + encoding + '"', {
+ encoding: encoding
+ })
+ }
+
+ return stream
+}
+
+/**
+ * Set a status on an error object, if ones does not exist
+ * @private
+ */
+
+function setErrorStatus (error, status) {
+ if (!error.status && !error.statusCode) {
+ error.status = status
+ error.statusCode = status
+ }
+}
diff --git a/node_modules/body-parser/lib/types/json.js b/node_modules/body-parser/lib/types/json.js
new file mode 100644
index 0000000..d0023c7
--- /dev/null
+++ b/node_modules/body-parser/lib/types/json.js
@@ -0,0 +1,175 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var createError = require('http-errors')
+var debug = require('debug')('body-parser:json')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = json
+
+/**
+ * RegExp to match the first non-space in a string.
+ *
+ * Allowed whitespace is defined in RFC 7159:
+ *
+ * ws = *(
+ * %x20 / ; Space
+ * %x09 / ; Horizontal tab
+ * %x0A / ; Line feed or New line
+ * %x0D ) ; Carriage return
+ */
+
+var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*(.)/ // eslint-disable-line no-control-regex
+
+/**
+ * Create a middleware to parse JSON bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @public
+ */
+
+function json (options) {
+ var opts = options || {}
+
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var inflate = opts.inflate !== false
+ var reviver = opts.reviver
+ var strict = opts.strict !== false
+ var type = opts.type || 'application/json'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (body) {
+ if (body.length === 0) {
+ // special-case empty json body, as it's a common client-side mistake
+ // TODO: maybe make this configurable or part of "strict" option
+ return {}
+ }
+
+ if (strict) {
+ var first = firstchar(body)
+
+ if (first !== '{' && first !== '[') {
+ debug('strict violation')
+ throw new SyntaxError('Unexpected token ' + first)
+ }
+ }
+
+ debug('parse json')
+ return JSON.parse(body, reviver)
+ }
+
+ return function jsonParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // assert charset per RFC 7159 sec 8.1
+ var charset = getCharset(req) || 'utf-8'
+ if (charset.substr(0, 4) !== 'utf-') {
+ debug('invalid charset')
+ next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
+ charset: charset
+ }))
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the first non-whitespace character in a string.
+ *
+ * @param {string} str
+ * @return {function}
+ * @api public
+ */
+
+function firstchar (str) {
+ var match = FIRST_CHAR_REGEXP.exec(str)
+ return match ? match[1] : ''
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return contentType.parse(req).parameters.charset.toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/raw.js b/node_modules/body-parser/lib/types/raw.js
new file mode 100644
index 0000000..f5d1b67
--- /dev/null
+++ b/node_modules/body-parser/lib/types/raw.js
@@ -0,0 +1,101 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ */
+
+var bytes = require('bytes')
+var debug = require('debug')('body-parser:raw')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = raw
+
+/**
+ * Create a middleware to parse raw bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @api public
+ */
+
+function raw (options) {
+ var opts = options || {}
+
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'application/octet-stream'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (buf) {
+ return buf
+ }
+
+ return function rawParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: null,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/text.js b/node_modules/body-parser/lib/types/text.js
new file mode 100644
index 0000000..8bf2637
--- /dev/null
+++ b/node_modules/body-parser/lib/types/text.js
@@ -0,0 +1,121 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var debug = require('debug')('body-parser:text')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = text
+
+/**
+ * Create a middleware to parse text bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @api public
+ */
+
+function text (options) {
+ var opts = options || {}
+
+ var defaultCharset = opts.defaultCharset || 'utf-8'
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'text/plain'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (buf) {
+ return buf
+ }
+
+ return function textParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // get charset
+ var charset = getCharset(req) || defaultCharset
+
+ // read
+ read(req, res, next, parse, debug, {
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return contentType.parse(req).parameters.charset.toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/lib/types/urlencoded.js b/node_modules/body-parser/lib/types/urlencoded.js
new file mode 100644
index 0000000..08157ae
--- /dev/null
+++ b/node_modules/body-parser/lib/types/urlencoded.js
@@ -0,0 +1,279 @@
+/*!
+ * body-parser
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var bytes = require('bytes')
+var contentType = require('content-type')
+var createError = require('http-errors')
+var debug = require('debug')('body-parser:urlencoded')
+var deprecate = require('depd')('body-parser')
+var read = require('../read')
+var typeis = require('type-is')
+
+/**
+ * Module exports.
+ */
+
+module.exports = urlencoded
+
+/**
+ * Cache of parser modules.
+ */
+
+var parsers = Object.create(null)
+
+/**
+ * Create a middleware to parse urlencoded bodies.
+ *
+ * @param {object} [options]
+ * @return {function}
+ * @public
+ */
+
+function urlencoded (options) {
+ var opts = options || {}
+
+ // notice because option default will flip in next major
+ if (opts.extended === undefined) {
+ deprecate('undefined extended: provide extended option')
+ }
+
+ var extended = opts.extended !== false
+ var inflate = opts.inflate !== false
+ var limit = typeof opts.limit !== 'number'
+ ? bytes.parse(opts.limit || '100kb')
+ : opts.limit
+ var type = opts.type || 'application/x-www-form-urlencoded'
+ var verify = opts.verify || false
+
+ if (verify !== false && typeof verify !== 'function') {
+ throw new TypeError('option verify must be function')
+ }
+
+ // create the appropriate query parser
+ var queryparse = extended
+ ? extendedparser(opts)
+ : simpleparser(opts)
+
+ // create the appropriate type checking function
+ var shouldParse = typeof type !== 'function'
+ ? typeChecker(type)
+ : type
+
+ function parse (body) {
+ return body.length
+ ? queryparse(body)
+ : {}
+ }
+
+ return function urlencodedParser (req, res, next) {
+ if (req._body) {
+ debug('body already parsed')
+ next()
+ return
+ }
+
+ req.body = req.body || {}
+
+ // skip requests without bodies
+ if (!typeis.hasBody(req)) {
+ debug('skip empty body')
+ next()
+ return
+ }
+
+ debug('content-type %j', req.headers['content-type'])
+
+ // determine if request should be parsed
+ if (!shouldParse(req)) {
+ debug('skip parsing')
+ next()
+ return
+ }
+
+ // assert charset
+ var charset = getCharset(req) || 'utf-8'
+ if (charset !== 'utf-8') {
+ debug('invalid charset')
+ next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
+ charset: charset
+ }))
+ return
+ }
+
+ // read
+ read(req, res, next, parse, debug, {
+ debug: debug,
+ encoding: charset,
+ inflate: inflate,
+ limit: limit,
+ verify: verify
+ })
+ }
+}
+
+/**
+ * Get the extended query parser.
+ *
+ * @param {object} options
+ */
+
+function extendedparser (options) {
+ var parameterLimit = options.parameterLimit !== undefined
+ ? options.parameterLimit
+ : 1000
+ var parse = parser('qs')
+
+ if (isNaN(parameterLimit) || parameterLimit < 1) {
+ throw new TypeError('option parameterLimit must be a positive number')
+ }
+
+ if (isFinite(parameterLimit)) {
+ parameterLimit = parameterLimit | 0
+ }
+
+ return function queryparse (body) {
+ var paramCount = parameterCount(body, parameterLimit)
+
+ if (paramCount === undefined) {
+ debug('too many parameters')
+ throw createError(413, 'too many parameters')
+ }
+
+ var arrayLimit = Math.max(100, paramCount)
+
+ debug('parse extended urlencoding')
+ return parse(body, {
+ allowPrototypes: true,
+ arrayLimit: arrayLimit,
+ depth: Infinity,
+ parameterLimit: parameterLimit
+ })
+ }
+}
+
+/**
+ * Get the charset of a request.
+ *
+ * @param {object} req
+ * @api private
+ */
+
+function getCharset (req) {
+ try {
+ return contentType.parse(req).parameters.charset.toLowerCase()
+ } catch (e) {
+ return undefined
+ }
+}
+
+/**
+ * Count the number of parameters, stopping once limit reached
+ *
+ * @param {string} body
+ * @param {number} limit
+ * @api private
+ */
+
+function parameterCount (body, limit) {
+ var count = 0
+ var index = 0
+
+ while ((index = body.indexOf('&', index)) !== -1) {
+ count++
+ index++
+
+ if (count === limit) {
+ return undefined
+ }
+ }
+
+ return count
+}
+
+/**
+ * Get parser for module name dynamically.
+ *
+ * @param {string} name
+ * @return {function}
+ * @api private
+ */
+
+function parser (name) {
+ var mod = parsers[name]
+
+ if (mod !== undefined) {
+ return mod.parse
+ }
+
+ // this uses a switch for static require analysis
+ switch (name) {
+ case 'qs':
+ mod = require('qs')
+ break
+ case 'querystring':
+ mod = require('querystring')
+ break
+ }
+
+ // store to prevent invoking require()
+ parsers[name] = mod
+
+ return mod.parse
+}
+
+/**
+ * Get the simple query parser.
+ *
+ * @param {object} options
+ */
+
+function simpleparser (options) {
+ var parameterLimit = options.parameterLimit !== undefined
+ ? options.parameterLimit
+ : 1000
+ var parse = parser('querystring')
+
+ if (isNaN(parameterLimit) || parameterLimit < 1) {
+ throw new TypeError('option parameterLimit must be a positive number')
+ }
+
+ if (isFinite(parameterLimit)) {
+ parameterLimit = parameterLimit | 0
+ }
+
+ return function queryparse (body) {
+ var paramCount = parameterCount(body, parameterLimit)
+
+ if (paramCount === undefined) {
+ debug('too many parameters')
+ throw createError(413, 'too many parameters')
+ }
+
+ debug('parse urlencoding')
+ return parse(body, undefined, undefined, {maxKeys: parameterLimit})
+ }
+}
+
+/**
+ * Get the simple type checker.
+ *
+ * @param {string} type
+ * @return {function}
+ */
+
+function typeChecker (type) {
+ return function checkType (req) {
+ return Boolean(typeis(req, type))
+ }
+}
diff --git a/node_modules/body-parser/node_modules/debug/.coveralls.yml b/node_modules/body-parser/node_modules/debug/.coveralls.yml
new file mode 100644
index 0000000..20a7068
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/.coveralls.yml
@@ -0,0 +1 @@
+repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
diff --git a/node_modules/body-parser/node_modules/debug/.eslintrc b/node_modules/body-parser/node_modules/debug/.eslintrc
new file mode 100644
index 0000000..8a37ae2
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "rules": {
+ "no-console": 0,
+ "no-empty": [1, { "allowEmptyCatch": true }]
+ },
+ "extends": "eslint:recommended"
+}
diff --git a/node_modules/body-parser/node_modules/debug/.npmignore b/node_modules/body-parser/node_modules/debug/.npmignore
new file mode 100644
index 0000000..db2fbb9
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/.npmignore
@@ -0,0 +1,8 @@
+support
+test
+examples
+example
+*.sock
+dist
+yarn.lock
+coverage
diff --git a/node_modules/body-parser/node_modules/debug/.travis.yml b/node_modules/body-parser/node_modules/debug/.travis.yml
new file mode 100644
index 0000000..6c6090c
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/.travis.yml
@@ -0,0 +1,14 @@
+
+language: node_js
+node_js:
+ - "6"
+ - "5"
+ - "4"
+
+install:
+ - make node_modules
+
+script:
+ - make lint
+ - make test
+ - make coveralls
diff --git a/node_modules/body-parser/node_modules/debug/CHANGELOG.md b/node_modules/body-parser/node_modules/debug/CHANGELOG.md
new file mode 100644
index 0000000..99abf97
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/CHANGELOG.md
@@ -0,0 +1,316 @@
+2.6.1 / 2017-02-10
+==================
+
+ * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+ * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+ * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+ * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+ * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+ * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+ * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+ * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+ * Docs: fixed README typo (#391, @lurch)
+ * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+ * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+ * Fix: wrong reference in bower file (@thebigredgeek)
+ * Fix: webworker compatibility (@thebigredgeek)
+ * Fix: output formatting issue (#388, @kribblo)
+ * Fix: babel-loader compatibility (#383, @escwald)
+ * Misc: removed built asset from repo and publications (@thebigredgeek)
+ * Misc: moved source files to /src (#378, @yamikuronue)
+ * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+ * Test: coveralls integration (#378, @yamikuronue)
+ * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+ * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+ * Fix: custom log function (#379, @hsiliev)
+ * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+ * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+ * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+ * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+ * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+ * Fix: browser colors (#367, @tootallnate)
+ * Misc: travis ci integration (@thebigredgeek)
+ * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+ * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+ * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+ * Fix: revert "handle regex special characters" (@tootallnate)
+ * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+ * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+ * Improvement: allow colors in workers (#335, @botverse)
+ * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+ * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+ * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+ * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+ * Fix: be super-safe in index.js as well (@TooTallNate)
+ * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+ * Fix: Added electron compatibility (#324, @paulcbetts)
+ * Improvement: Added performance optimizations (@tootallnate)
+ * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+ * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+ * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+ * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+ * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+ * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+ * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+ * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+ * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+ * Readme: fix USE_COLORS to DEBUG_COLORS
+ * Readme: Doc fixes for format string sugar (#269, @mlucool)
+ * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+ * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+ * Readme: better docs for browser support (#224, @matthewmueller)
+ * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+ * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+ * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+ * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+ * package: update "ms" to v0.7.1 (#202, @dougwilson)
+ * README: add logging to file example (#193, @DanielOchoa)
+ * README: fixed a typo (#191, @amir-s)
+ * browser: expose `storage` (#190, @stephenmathieson)
+ * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+ * Updated stdout/stderr example (#186)
+ * Updated example/stdout.js to match debug current behaviour
+ * Renamed example/stderr.js to stdout.js
+ * Update Readme.md (#184)
+ * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+ * dist: recompile
+ * update "ms" to v0.7.0
+ * package: update "browserify" to v9.0.3
+ * component: fix "ms.js" repo location
+ * changed bower package name
+ * updated documentation about using debug in a browser
+ * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+ * browser: use `typeof` to check for `console` existence
+ * browser: check for `console.log` truthiness (fix IE 8/9)
+ * browser: add support for Chrome apps
+ * Readme: added Windows usage remarks
+ * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+ * node: implement `DEBUG_FD` env variable support
+ * package: update "browserify" to v6.1.0
+ * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+ * package: update "browserify" to v5.11.0
+ * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+ * dist: recompile
+ * example: remove `console.info()` log usage
+ * example: add "Content-Type" UTF-8 header to browser example
+ * browser: place %c marker after the space character
+ * browser: reset the "content" color via `color: inherit`
+ * browser: add colors support for Firefox >= v31
+ * debug: prefer an instance `log()` function over the global one (#119)
+ * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+ * Add support for multiple wildcards in namespaces (#122, @seegno)
+ * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+ * browser: update color palette (#113, @gscottolson)
+ * common: make console logging function configurable (#108, @timoxley)
+ * node: fix %o colors on old node <= 0.8.x
+ * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+ * browser: use `removeItem()` to clear localStorage
+ * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+ * package: add "contributors" section
+ * node: fix comment typo
+ * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+ * make ms diff be global, not be scope
+ * debug: ignore empty strings in enable()
+ * node: make DEBUG_COLORS able to disable coloring
+ * *: export the `colors` array
+ * npmignore: don't publish the `dist` dir
+ * Makefile: refactor to use browserify
+ * package: add "browserify" as a dev dependency
+ * Readme: add Web Inspector Colors section
+ * node: reset terminal color for the debug content
+ * node: map "%o" to `util.inspect()`
+ * browser: map "%j" to `JSON.stringify()`
+ * debug: add custom "formatters"
+ * debug: use "ms" module for humanizing the diff
+ * Readme: add "bash" syntax highlighting
+ * browser: add Firebug color support
+ * browser: add colors for WebKit browsers
+ * node: apply log to `console`
+ * rewrite: abstract common logic for Node & browsers
+ * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+ * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+ * add `enable()` method for nodejs. Closes #27
+ * change from stderr to stdout
+ * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+ * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+ * fix: catch localStorage security error when cookies are blocked (Chrome)
+ * add debug(err) support. Closes #46
+ * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+ * fix package.json
+ * fix: Mobile Safari (private mode) is broken with debug
+ * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+ * add repository URL to package.json
+ * add DEBUG_COLORED to force colored output
+ * add browserify support
+ * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+ * Added .component to package.json
+ * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+ * Added support for "-" prefix in DEBUG [Vinay Pulim]
+ * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+ * Added: humanize diffs. Closes #8
+ * Added `debug.disable()` to the CS variant
+ * Removed padding. Closes #10
+ * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+ * Added browser variant support for older browsers [TooTallNate]
+ * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+ * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+ * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+ * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+ * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/node_modules/body-parser/node_modules/debug/LICENSE b/node_modules/body-parser/node_modules/debug/LICENSE
new file mode 100644
index 0000000..658c933
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/LICENSE
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+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/node_modules/body-parser/node_modules/debug/Makefile b/node_modules/body-parser/node_modules/debug/Makefile
new file mode 100644
index 0000000..584da8b
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/Makefile
@@ -0,0 +1,50 @@
+# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
+THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
+
+# BIN directory
+BIN := $(THIS_DIR)/node_modules/.bin
+
+# Path
+PATH := node_modules/.bin:$(PATH)
+SHELL := /bin/bash
+
+# applications
+NODE ?= $(shell which node)
+YARN ?= $(shell which yarn)
+PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
+BROWSERIFY ?= $(NODE) $(BIN)/browserify
+
+.FORCE:
+
+install: node_modules
+
+node_modules: package.json
+ @NODE_ENV= $(PKG) install
+ @touch node_modules
+
+lint: .FORCE
+ eslint browser.js debug.js index.js node.js
+
+test-node: .FORCE
+ istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+
+test-browser: .FORCE
+ mkdir -p dist
+
+ @$(BROWSERIFY) \
+ --standalone debug \
+ . > dist/debug.js
+
+ karma start --single-run
+ rimraf dist
+
+test: .FORCE
+ concurrently \
+ "make test-node" \
+ "make test-browser"
+
+coveralls:
+ cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+
+.PHONY: all install clean distclean
diff --git a/node_modules/body-parser/node_modules/debug/README.md b/node_modules/body-parser/node_modules/debug/README.md
new file mode 100644
index 0000000..2c57ddf
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/README.md
@@ -0,0 +1,238 @@
+# debug
+[](https://travis-ci.org/visionmedia/debug) [](https://coveralls.io/github/visionmedia/debug?branch=master)
+
+A tiny node.js debugging utility modelled after node core's debugging technique.
+
+**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example _app.js_:
+
+```js
+var debug = require('debug')('http')
+ , http = require('http')
+ , name = 'My App';
+
+// fake app
+
+debug('booting %s', name);
+
+http.createServer(function(req, res){
+ debug(req.method + ' ' + req.url);
+ res.end('hello\n');
+}).listen(3000, function(){
+ debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example _worker.js_:
+
+```js
+var debug = require('debug')('worker');
+
+setInterval(function(){
+ debug('doing some work');
+}, 1000);
+```
+
+ The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
+
+ 
+
+ 
+
+#### Windows note
+
+ On Windows the environment variable is set using the `set` command.
+
+ ```cmd
+ set DEBUG=*,-not_this
+ ```
+
+ Note that PowerShell uses different syntax to set environment variables.
+
+ ```cmd
+ $env:DEBUG = "*,-not_this"
+ ```
+
+Then, run the program to be debugged as usual.
+
+## Millisecond diff
+
+ When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+ 
+
+ When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+
+ 
+
+## Conventions
+
+ If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
+
+## Wildcards
+
+ The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+ You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
+
+## Environment Variables
+
+ When running through Node.js, you can set a few environment variables that will
+ change the behavior of the debug logging:
+
+| Name | Purpose |
+|-----------|-------------------------------------------------|
+| `DEBUG` | Enables/disabled specific debugging namespaces. |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth. |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+ __Note:__ The environment variables beginning with `DEBUG_` end up being
+ converted into an Options object that gets used with `%o`/`%O` formatters.
+ See the Node.js documentation for
+ [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+ for the complete list.
+
+## Formatters
+
+
+ Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O` | Pretty-print an Object on multiple lines. |
+| `%o` | Pretty-print an Object all on a single line. |
+| `%s` | String. |
+| `%d` | Number (both integer and float). |
+| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%` | Single percent sign ('%'). This does not consume an argument. |
+
+### Custom formatters
+
+ You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+ return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+// foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+## Browser support
+ You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+ or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+ if you don't want to build it yourself.
+
+ Debug's enable state is currently persisted by `localStorage`.
+ Consider the situation shown below where you have `worker:a` and `worker:b`,
+ and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+ a('doing some work');
+}, 1000);
+
+setInterval(function(){
+ b('doing some work');
+}, 1200);
+```
+
+#### Web Inspector Colors
+
+ Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+ option. These are WebKit web inspectors, Firefox ([since version
+ 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+ and the Firebug plugin for Firefox (any version).
+
+ Colored output looks something like:
+
+ 
+
+
+## Output streams
+
+ By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example _stdout.js_:
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>
+
+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/node_modules/body-parser/node_modules/debug/bower.json b/node_modules/body-parser/node_modules/debug/bower.json
new file mode 100644
index 0000000..027804c
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/bower.json
@@ -0,0 +1,29 @@
+{
+ "name": "visionmedia-debug",
+ "main": "./src/browser.js",
+ "homepage": "https://github.com/visionmedia/debug",
+ "authors": [
+ "TJ Holowaychuk ",
+ "Nathan Rajlich (http://n8.io)",
+ "Andrew Rhyne "
+ ],
+ "description": "visionmedia-debug",
+ "moduleType": [
+ "amd",
+ "es6",
+ "globals",
+ "node"
+ ],
+ "keywords": [
+ "visionmedia",
+ "debug"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ]
+}
diff --git a/node_modules/body-parser/node_modules/debug/component.json b/node_modules/body-parser/node_modules/debug/component.json
new file mode 100644
index 0000000..4861027
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/component.json
@@ -0,0 +1,19 @@
+{
+ "name": "debug",
+ "repo": "visionmedia/debug",
+ "description": "small debugging utility",
+ "version": "2.6.1",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "main": "src/browser.js",
+ "scripts": [
+ "src/browser.js",
+ "src/debug.js"
+ ],
+ "dependencies": {
+ "rauchg/ms.js": "0.7.1"
+ }
+}
diff --git a/node_modules/body-parser/node_modules/debug/karma.conf.js b/node_modules/body-parser/node_modules/debug/karma.conf.js
new file mode 100644
index 0000000..103a82d
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/karma.conf.js
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['mocha', 'chai', 'sinon'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ 'dist/debug.js',
+ 'test/*spec.js'
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+ 'src/node.js'
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+ },
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_INFO,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['PhantomJS'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false,
+
+ // Concurrency level
+ // how many browser should be started simultaneous
+ concurrency: Infinity
+ })
+}
diff --git a/node_modules/body-parser/node_modules/debug/node.js b/node_modules/body-parser/node_modules/debug/node.js
new file mode 100644
index 0000000..7fc36fe
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/node.js
@@ -0,0 +1 @@
+module.exports = require('./src/node');
diff --git a/node_modules/body-parser/node_modules/debug/package.json b/node_modules/body-parser/node_modules/debug/package.json
new file mode 100644
index 0000000..f10846a
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/package.json
@@ -0,0 +1,124 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "debug@2.6.1",
+ "scope": null,
+ "escapedName": "debug",
+ "name": "debug",
+ "rawSpec": "2.6.1",
+ "spec": "2.6.1",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser"
+ ]
+ ],
+ "_from": "debug@2.6.1",
+ "_id": "debug@2.6.1",
+ "_inCache": true,
+ "_location": "/body-parser/debug",
+ "_nodeVersion": "6.9.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/debug-2.6.1.tgz_1486753226738_0.07569954148493707"
+ },
+ "_npmUser": {
+ "name": "thebigredgeek",
+ "email": "rhyneandrew@gmail.com"
+ },
+ "_npmVersion": "4.0.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "debug@2.6.1",
+ "scope": null,
+ "escapedName": "debug",
+ "name": "debug",
+ "rawSpec": "2.6.1",
+ "spec": "2.6.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/body-parser"
+ ],
+ "_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz",
+ "_shasum": "79855090ba2c4e3115cc7d8769491d58f0491351",
+ "_shrinkwrap": null,
+ "_spec": "debug@2.6.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser",
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca"
+ },
+ "browser": "./src/browser.js",
+ "bugs": {
+ "url": "https://github.com/visionmedia/debug/issues"
+ },
+ "component": {
+ "scripts": {
+ "debug/index.js": "browser.js",
+ "debug/debug.js": "debug.js"
+ }
+ },
+ "contributors": [
+ {
+ "name": "Nathan Rajlich",
+ "email": "nathan@tootallnate.net",
+ "url": "http://n8.io"
+ },
+ {
+ "name": "Andrew Rhyne",
+ "email": "rhyneandrew@gmail.com"
+ }
+ ],
+ "dependencies": {
+ "ms": "0.7.2"
+ },
+ "description": "small debugging utility",
+ "devDependencies": {
+ "browserify": "9.0.3",
+ "chai": "^3.5.0",
+ "concurrently": "^3.1.0",
+ "coveralls": "^2.11.15",
+ "eslint": "^3.12.1",
+ "istanbul": "^0.4.5",
+ "karma": "^1.3.0",
+ "karma-chai": "^0.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-phantomjs-launcher": "^1.0.2",
+ "karma-sinon": "^1.0.5",
+ "mocha": "^3.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "rimraf": "^2.5.4",
+ "sinon": "^1.17.6",
+ "sinon-chai": "^2.8.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "79855090ba2c4e3115cc7d8769491d58f0491351",
+ "tarball": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz"
+ },
+ "gitHead": "941653e3334e9e3e2cca87cad9bbf6c5cb245215",
+ "homepage": "https://github.com/visionmedia/debug#readme",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "license": "MIT",
+ "main": "./src/index.js",
+ "maintainers": [
+ {
+ "name": "thebigredgeek",
+ "email": "rhyneandrew@gmail.com"
+ }
+ ],
+ "name": "debug",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/debug.git"
+ },
+ "scripts": {},
+ "version": "2.6.1"
+}
diff --git a/node_modules/body-parser/node_modules/debug/src/browser.js b/node_modules/body-parser/node_modules/debug/src/browser.js
new file mode 100644
index 0000000..38d6391
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/src/browser.js
@@ -0,0 +1,182 @@
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+ && 'undefined' != typeof chrome.storage
+ ? chrome.storage.local
+ : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ 'lightseagreen',
+ 'forestgreen',
+ 'goldenrod',
+ 'dodgerblue',
+ 'darkorchid',
+ 'crimson'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window && typeof window.process !== 'undefined' && window.process.type === 'renderer') {
+ return true;
+ }
+
+ // is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document && 'WebkitAppearance' in document.documentElement.style) ||
+ // is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window && window.console && (console.firebug || (console.exception && console.table))) ||
+ // is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+ try {
+ return JSON.stringify(v);
+ } catch (err) {
+ return '[UnexpectedJSONParseError]: ' + err.message;
+ }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var useColors = this.useColors;
+
+ args[0] = (useColors ? '%c' : '')
+ + this.namespace
+ + (useColors ? ' %c' : ' ')
+ + args[0]
+ + (useColors ? '%c ' : ' ')
+ + '+' + exports.humanize(this.diff);
+
+ if (!useColors) return;
+
+ var c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit')
+
+ // the final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ var index = 0;
+ var lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, function(match) {
+ if ('%%' === match) return;
+ index++;
+ if ('%c' === match) {
+ // we only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+ // this hackery is required for IE8/9, where
+ // the `console.log` function doesn't have 'apply'
+ return 'object' === typeof console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ try {
+ if (null == namespaces) {
+ exports.storage.removeItem('debug');
+ } else {
+ exports.storage.debug = namespaces;
+ }
+ } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ try {
+ return exports.storage.debug;
+ } catch(e) {}
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (typeof process !== 'undefined' && 'env' in process) {
+ return process.env.DEBUG;
+ }
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ return window.localStorage;
+ } catch (e) {}
+}
diff --git a/node_modules/body-parser/node_modules/debug/src/debug.js b/node_modules/body-parser/node_modules/debug/src/debug.js
new file mode 100644
index 0000000..d5d6d16
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/src/debug.js
@@ -0,0 +1,202 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = require('ms');
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Previous log timestamp.
+ */
+
+var prevTime;
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+ var hash = 0, i;
+
+ for (i in namespace) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+ function debug() {
+ // disabled?
+ if (!debug.enabled) return;
+
+ var self = debug;
+
+ // set `diff` timestamp
+ var curr = +new Date();
+ var ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ // turn the `arguments` into a proper Array
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+
+ args[0] = exports.coerce(args[0]);
+
+ if ('string' !== typeof args[0]) {
+ // anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // apply any `formatters` transformations
+ var index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+ // if we encounter an escaped % then don't increase the array index
+ if (match === '%%') return match;
+ index++;
+ var formatter = exports.formatters[format];
+ if ('function' === typeof formatter) {
+ var val = args[index];
+ match = formatter.call(self, val);
+
+ // now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // apply env-specific formatting (colors, etc.)
+ exports.formatArgs.call(self, args);
+
+ var logFn = debug.log || exports.log || console.log.bind(console);
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.enabled = exports.enabled(namespace);
+ debug.useColors = exports.useColors();
+ debug.color = selectColor(namespace);
+
+ // env-specific initialization logic for debug instances
+ if ('function' === typeof exports.init) {
+ exports.init(debug);
+ }
+
+ return debug;
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+ exports.save(namespaces);
+
+ exports.names = [];
+ exports.skips = [];
+
+ var split = (namespaces || '').split(/[\s,]+/);
+ var len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ if (!split[i]) continue; // ignore empty strings
+ namespaces = split[i].replace(/\*/g, '.*?');
+ if (namespaces[0] === '-') {
+ exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ exports.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+ exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+ var i, len;
+ for (i = 0, len = exports.skips.length; i < len; i++) {
+ if (exports.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (i = 0, len = exports.names.length; i < len; i++) {
+ if (exports.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
diff --git a/node_modules/body-parser/node_modules/debug/src/index.js b/node_modules/body-parser/node_modules/debug/src/index.js
new file mode 100644
index 0000000..e12cf4d
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process !== 'undefined' && process.type === 'renderer') {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/node_modules/body-parser/node_modules/debug/src/node.js b/node_modules/body-parser/node_modules/debug/src/node.js
new file mode 100644
index 0000000..4fa564b
--- /dev/null
+++ b/node_modules/body-parser/node_modules/debug/src/node.js
@@ -0,0 +1,241 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+ return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+ // camel-case
+ var prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/, function (_, k) { return k.toUpperCase() });
+
+ // coerce string value into JS value
+ var val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+ else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+ else if (val === 'null') val = null;
+ else val = Number(val);
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * The file descriptor to write the `debug()` calls to.
+ * Set the `DEBUG_FD` env variable to override with another value. i.e.:
+ *
+ * $ DEBUG_FD=3 node script.js 3>debug.log
+ */
+
+var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
+
+if (1 !== fd && 2 !== fd) {
+ util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
+}
+
+var stream = 1 === fd ? process.stdout :
+ 2 === fd ? process.stderr :
+ createWritableStdioStream(fd);
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts
+ ? Boolean(exports.inspectOpts.colors)
+ : tty.isatty(fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .replace(/\s*\n\s*/g, ' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var name = this.namespace;
+ var useColors = this.useColors;
+
+ if (useColors) {
+ var c = this.color;
+ var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+ } else {
+ args[0] = new Date().toUTCString()
+ + ' ' + name + ' ' + args[0];
+ }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to `stream`.
+ */
+
+function log() {
+ return stream.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ if (null == namespaces) {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ } else {
+ process.env.DEBUG = namespaces;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Copied from `node/src/node.js`.
+ *
+ * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
+ * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
+ */
+
+function createWritableStdioStream (fd) {
+ var stream;
+ var tty_wrap = process.binding('tty_wrap');
+
+ // Note stream._type is used for test-module-load-list.js
+
+ switch (tty_wrap.guessHandleType(fd)) {
+ case 'TTY':
+ stream = new tty.WriteStream(fd);
+ stream._type = 'tty';
+
+ // Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ case 'FILE':
+ var fs = require('fs');
+ stream = new fs.SyncWriteStream(fd, { autoClose: false });
+ stream._type = 'fs';
+ break;
+
+ case 'PIPE':
+ case 'TCP':
+ var net = require('net');
+ stream = new net.Socket({
+ fd: fd,
+ readable: false,
+ writable: true
+ });
+
+ // FIXME Should probably have an option in net.Socket to create a
+ // stream from an existing fd which is writable only. But for now
+ // we'll just add this hack and set the `readable` member to false.
+ // Test: ./node test/fixtures/echo.js < /etc/passwd
+ stream.readable = false;
+ stream.read = null;
+ stream._type = 'pipe';
+
+ // FIXME Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ default:
+ // Probably an error on in uv_guess_handle()
+ throw new Error('Implement me. Unknown stream file type!');
+ }
+
+ // For supporting legacy API we put the FD here.
+ stream.fd = fd;
+
+ stream._isStdio = true;
+
+ return stream;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+ debug.inspectOpts = util._extend({}, exports.inspectOpts);
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
diff --git a/node_modules/body-parser/package.json b/node_modules/body-parser/package.json
new file mode 100644
index 0000000..2c05d4a
--- /dev/null
+++ b/node_modules/body-parser/package.json
@@ -0,0 +1,125 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "body-parser@~1.16.0",
+ "scope": null,
+ "escapedName": "body-parser",
+ "name": "body-parser",
+ "rawSpec": "~1.16.0",
+ "spec": ">=1.16.0 <1.17.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic"
+ ]
+ ],
+ "_from": "body-parser@>=1.16.0 <1.17.0",
+ "_id": "body-parser@1.16.1",
+ "_inCache": true,
+ "_location": "/body-parser",
+ "_nodeVersion": "4.6.1",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/body-parser-1.16.1.tgz_1486777002177_0.4995518890209496"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "2.15.9",
+ "_phantomChildren": {
+ "ms": "0.7.2"
+ },
+ "_requested": {
+ "raw": "body-parser@~1.16.0",
+ "scope": null,
+ "escapedName": "body-parser",
+ "name": "body-parser",
+ "rawSpec": "~1.16.0",
+ "spec": ">=1.16.0 <1.17.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.16.1.tgz",
+ "_shasum": "51540d045adfa7a0c6995a014bb6b1ed9b802329",
+ "_shrinkwrap": null,
+ "_spec": "body-parser@~1.16.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic",
+ "bugs": {
+ "url": "https://github.com/expressjs/body-parser/issues"
+ },
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "dependencies": {
+ "bytes": "2.4.0",
+ "content-type": "~1.0.2",
+ "debug": "2.6.1",
+ "depd": "~1.1.0",
+ "http-errors": "~1.5.1",
+ "iconv-lite": "0.4.15",
+ "on-finished": "~2.3.0",
+ "qs": "6.2.1",
+ "raw-body": "~2.2.0",
+ "type-is": "~1.6.14"
+ },
+ "description": "Node.js body parsing middleware",
+ "devDependencies": {
+ "eslint": "3.15.0",
+ "eslint-config-standard": "6.2.1",
+ "eslint-plugin-markdown": "1.0.0-beta.3",
+ "eslint-plugin-promise": "3.4.0",
+ "eslint-plugin-standard": "2.0.1",
+ "istanbul": "0.4.5",
+ "methods": "1.1.2",
+ "mocha": "2.5.3",
+ "supertest": "1.1.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "51540d045adfa7a0c6995a014bb6b1ed9b802329",
+ "tarball": "https://registry.npmjs.org/body-parser/-/body-parser-1.16.1.tgz"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "files": [
+ "lib/",
+ "LICENSE",
+ "HISTORY.md",
+ "index.js"
+ ],
+ "gitHead": "7b630f701d084267a8b9883b27f627014e003d47",
+ "homepage": "https://github.com/expressjs/body-parser#readme",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "name": "body-parser",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/expressjs/body-parser.git"
+ },
+ "scripts": {
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/"
+ },
+ "version": "1.16.1"
+}
diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md
new file mode 100644
index 0000000..ed2ec1f
--- /dev/null
+++ b/node_modules/brace-expansion/README.md
@@ -0,0 +1,123 @@
+# brace-expansion
+
+[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html),
+as known from sh/bash, in JavaScript.
+
+[](http://travis-ci.org/juliangruber/brace-expansion)
+[](https://www.npmjs.org/package/brace-expansion)
+[](https://greenkeeper.io/)
+
+[](https://ci.testling.com/juliangruber/brace-expansion)
+
+## Example
+
+```js
+var expand = require('brace-expansion');
+
+expand('file-{a,b,c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('-v{,,}')
+// => ['-v', '-v', '-v']
+
+expand('file{0..2}.jpg')
+// => ['file0.jpg', 'file1.jpg', 'file2.jpg']
+
+expand('file-{a..c}.jpg')
+// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']
+
+expand('file{2..0}.jpg')
+// => ['file2.jpg', 'file1.jpg', 'file0.jpg']
+
+expand('file{0..4..2}.jpg')
+// => ['file0.jpg', 'file2.jpg', 'file4.jpg']
+
+expand('file-{a..e..2}.jpg')
+// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']
+
+expand('file{00..10..5}.jpg')
+// => ['file00.jpg', 'file05.jpg', 'file10.jpg']
+
+expand('{{A..C},{a..c}}')
+// => ['A', 'B', 'C', 'a', 'b', 'c']
+
+expand('ppp{,config,oe{,conf}}')
+// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']
+```
+
+## API
+
+```js
+var expand = require('brace-expansion');
+```
+
+### var expanded = expand(str)
+
+Return an array of all possible and valid expansions of `str`. If none are
+found, `[str]` is returned.
+
+Valid expansions are:
+
+```js
+/^(.*,)+(.+)?$/
+// {a,b,...}
+```
+
+A comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+A numeric sequence from `x` to `y` inclusive, with optional increment.
+If `x` or `y` start with a leading `0`, all the numbers will be padded
+to have equal length. Negative numbers and backwards iteration work too.
+
+```js
+/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/
+// {x..y[..incr]}
+```
+
+An alphabetic sequence from `x` to `y` inclusive, with optional increment.
+`x` and `y` must be exactly one character, and if given, `incr` must be a
+number.
+
+For compatibility reasons, the string `${` is not eligible for brace expansion.
+
+## Installation
+
+With [npm](https://npmjs.org) do:
+
+```bash
+npm install brace-expansion
+```
+
+## Contributors
+
+- [Julian Gruber](https://github.com/juliangruber)
+- [Isaac Z. Schlueter](https://github.com/isaacs)
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.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.
diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js
new file mode 100644
index 0000000..0478be8
--- /dev/null
+++ b/node_modules/brace-expansion/index.js
@@ -0,0 +1,201 @@
+var concatMap = require('concat-map');
+var balanced = require('balanced-match');
+
+module.exports = expandTop;
+
+var escSlash = '\0SLASH'+Math.random()+'\0';
+var escOpen = '\0OPEN'+Math.random()+'\0';
+var escClose = '\0CLOSE'+Math.random()+'\0';
+var escComma = '\0COMMA'+Math.random()+'\0';
+var escPeriod = '\0PERIOD'+Math.random()+'\0';
+
+function numeric(str) {
+ return parseInt(str, 10) == str
+ ? parseInt(str, 10)
+ : str.charCodeAt(0);
+}
+
+function escapeBraces(str) {
+ return str.split('\\\\').join(escSlash)
+ .split('\\{').join(escOpen)
+ .split('\\}').join(escClose)
+ .split('\\,').join(escComma)
+ .split('\\.').join(escPeriod);
+}
+
+function unescapeBraces(str) {
+ return str.split(escSlash).join('\\')
+ .split(escOpen).join('{')
+ .split(escClose).join('}')
+ .split(escComma).join(',')
+ .split(escPeriod).join('.');
+}
+
+
+// Basically just str.split(","), but handling cases
+// where we have nested braced sections, which should be
+// treated as individual members, like {a,{b,c},d}
+function parseCommaParts(str) {
+ if (!str)
+ return [''];
+
+ var parts = [];
+ var m = balanced('{', '}', str);
+
+ if (!m)
+ return str.split(',');
+
+ var pre = m.pre;
+ var body = m.body;
+ var post = m.post;
+ var p = pre.split(',');
+
+ p[p.length-1] += '{' + body + '}';
+ var postParts = parseCommaParts(post);
+ if (post.length) {
+ p[p.length-1] += postParts.shift();
+ p.push.apply(p, postParts);
+ }
+
+ parts.push.apply(parts, p);
+
+ return parts;
+}
+
+function expandTop(str) {
+ if (!str)
+ return [];
+
+ // I don't know why Bash 4.3 does this, but it does.
+ // Anything starting with {} will have the first two bytes preserved
+ // but *only* at the top level, so {},a}b will not expand to anything,
+ // but a{},b}c will be expanded to [a}c,abc].
+ // One could argue that this is a bug in Bash, but since the goal of
+ // this module is to match Bash's rules, we escape a leading {}
+ if (str.substr(0, 2) === '{}') {
+ str = '\\{\\}' + str.substr(2);
+ }
+
+ return expand(escapeBraces(str), true).map(unescapeBraces);
+}
+
+function identity(e) {
+ return e;
+}
+
+function embrace(str) {
+ return '{' + str + '}';
+}
+function isPadded(el) {
+ return /^-?0\d/.test(el);
+}
+
+function lte(i, y) {
+ return i <= y;
+}
+function gte(i, y) {
+ return i >= y;
+}
+
+function expand(str, isTop) {
+ var expansions = [];
+
+ var m = balanced('{', '}', str);
+ if (!m || /\$$/.test(m.pre)) return [str];
+
+ var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
+ var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
+ var isSequence = isNumericSequence || isAlphaSequence;
+ var isOptions = m.body.indexOf(',') >= 0;
+ if (!isSequence && !isOptions) {
+ // {a},b}
+ if (m.post.match(/,.*\}/)) {
+ str = m.pre + '{' + m.body + escClose + m.post;
+ return expand(str);
+ }
+ return [str];
+ }
+
+ var n;
+ if (isSequence) {
+ n = m.body.split(/\.\./);
+ } else {
+ n = parseCommaParts(m.body);
+ if (n.length === 1) {
+ // x{{a,b}}y ==> x{a}y x{b}y
+ n = expand(n[0], false).map(embrace);
+ if (n.length === 1) {
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+ return post.map(function(p) {
+ return m.pre + n[0] + p;
+ });
+ }
+ }
+ }
+
+ // at this point, n is the parts, and we know it's not a comma set
+ // with a single entry.
+
+ // no need to expand pre, since it is guaranteed to be free of brace-sets
+ var pre = m.pre;
+ var post = m.post.length
+ ? expand(m.post, false)
+ : [''];
+
+ var N;
+
+ if (isSequence) {
+ var x = numeric(n[0]);
+ var y = numeric(n[1]);
+ var width = Math.max(n[0].length, n[1].length)
+ var incr = n.length == 3
+ ? Math.abs(numeric(n[2]))
+ : 1;
+ var test = lte;
+ var reverse = y < x;
+ if (reverse) {
+ incr *= -1;
+ test = gte;
+ }
+ var pad = n.some(isPadded);
+
+ N = [];
+
+ for (var i = x; test(i, y); i += incr) {
+ var c;
+ if (isAlphaSequence) {
+ c = String.fromCharCode(i);
+ if (c === '\\')
+ c = '';
+ } else {
+ c = String(i);
+ if (pad) {
+ var need = width - c.length;
+ if (need > 0) {
+ var z = new Array(need + 1).join('0');
+ if (i < 0)
+ c = '-' + z + c.slice(1);
+ else
+ c = z + c;
+ }
+ }
+ }
+ N.push(c);
+ }
+ } else {
+ N = concatMap(n, function(el) { return expand(el, false) });
+ }
+
+ for (var j = 0; j < N.length; j++) {
+ for (var k = 0; k < post.length; k++) {
+ var expansion = pre + N[j] + post[k];
+ if (!isTop || isSequence || expansion)
+ expansions.push(expansion);
+ }
+ }
+
+ return expansions;
+}
+
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
new file mode 100644
index 0000000..3278a16
--- /dev/null
+++ b/node_modules/brace-expansion/package.json
@@ -0,0 +1,114 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "brace-expansion@^1.0.0",
+ "scope": null,
+ "escapedName": "brace-expansion",
+ "name": "brace-expansion",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/minimatch"
+ ]
+ ],
+ "_from": "brace-expansion@>=1.0.0 <2.0.0",
+ "_id": "brace-expansion@1.1.7",
+ "_inCache": true,
+ "_location": "/brace-expansion",
+ "_nodeVersion": "7.8.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/brace-expansion-1.1.7.tgz_1491552830231_0.7213963181711733"
+ },
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "_npmVersion": "4.2.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "brace-expansion@^1.0.0",
+ "scope": null,
+ "escapedName": "brace-expansion",
+ "name": "brace-expansion",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/minimatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
+ "_shasum": "3effc3c50e000531fb720eaff80f0ae8ef23cf59",
+ "_shrinkwrap": null,
+ "_spec": "brace-expansion@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/minimatch",
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/brace-expansion/issues"
+ },
+ "dependencies": {
+ "balanced-match": "^0.4.1",
+ "concat-map": "0.0.1"
+ },
+ "description": "Brace expansion as known from sh/bash",
+ "devDependencies": {
+ "matcha": "^0.7.0",
+ "tape": "^4.6.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "3effc3c50e000531fb720eaff80f0ae8ef23cf59",
+ "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz"
+ },
+ "gitHead": "892512024872ca7680554be90f6e8ce065053372",
+ "homepage": "https://github.com/juliangruber/brace-expansion",
+ "keywords": [],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ }
+ ],
+ "name": "brace-expansion",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/brace-expansion.git"
+ },
+ "scripts": {
+ "bench": "matcha test/perf/bench.js",
+ "gentest": "bash test/generate.sh",
+ "test": "tape test/*.js"
+ },
+ "testling": {
+ "files": "test/*.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/20..latest",
+ "firefox/nightly",
+ "chrome/25..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ },
+ "version": "1.1.7"
+}
diff --git a/node_modules/braces/LICENSE b/node_modules/braces/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/braces/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/braces/README.md b/node_modules/braces/README.md
new file mode 100644
index 0000000..52fa756
--- /dev/null
+++ b/node_modules/braces/README.md
@@ -0,0 +1,248 @@
+# braces [](https://www.npmjs.com/package/braces) [](https://npmjs.org/package/braces) [](https://travis-ci.org/jonschlinkert/braces)
+
+Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install braces --save
+```
+
+## Features
+
+* Complete support for the braces part of the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/). Braces passes [all of the relevant unit tests](#bash-4-3-support) from the spec.
+* Expands comma-separated values: `a/{b,c}/d` => `['a/b/d', 'a/c/d']`
+* Expands alphabetical or numerical ranges: `{1..3}` => `['1', '2', '3']`
+* [Very fast](#benchmarks)
+* [Special characters](./patterns.md) can be used to generate interesting patterns.
+
+## Example usage
+
+```js
+var braces = require('braces');
+
+braces('a/{x,y}/c{d}e')
+//=> ['a/x/cde', 'a/y/cde']
+
+braces('a/b/c/{x,y}')
+//=> ['a/b/c/x', 'a/b/c/y']
+
+braces('a/{x,{1..5},y}/c{d}e')
+//=> ['a/x/cde', 'a/1/cde', 'a/y/cde', 'a/2/cde', 'a/3/cde', 'a/4/cde', 'a/5/cde']
+```
+
+### Use case: fixtures
+
+> Use braces to generate test fixtures!
+
+**Example**
+
+```js
+var braces = require('./');
+var path = require('path');
+var fs = require('fs');
+
+braces('blah/{a..z}.js').forEach(function(fp) {
+ if (!fs.existsSync(path.dirname(fp))) {
+ fs.mkdirSync(path.dirname(fp));
+ }
+ fs.writeFileSync(fp, '');
+});
+```
+
+See the [tests](./test/test.js) for more examples and use cases (also see the [bash spec tests](./test/bash-mm-adjusted.js));
+
+### Range expansion
+
+Uses [expand-range](https://github.com/jonschlinkert/expand-range) for range expansion.
+
+```js
+braces('a{1..3}b')
+//=> ['a1b', 'a2b', 'a3b']
+
+braces('a{5..8}b')
+//=> ['a5b', 'a6b', 'a7b', 'a8b']
+
+braces('a{00..05}b')
+//=> ['a00b', 'a01b', 'a02b', 'a03b', 'a04b', 'a05b']
+
+braces('a{01..03}b')
+//=> ['a01b', 'a02b', 'a03b']
+
+braces('a{000..005}b')
+//=> ['a000b', 'a001b', 'a002b', 'a003b', 'a004b', 'a005b']
+
+braces('a{a..e}b')
+//=> ['aab', 'abb', 'acb', 'adb', 'aeb']
+
+braces('a{A..E}b')
+//=> ['aAb', 'aBb', 'aCb', 'aDb', 'aEb']
+```
+
+Pass a function as the last argument to customize range expansions:
+
+```js
+var range = braces('x{a..e}y', function (str, i) {
+ return String.fromCharCode(str) + i;
+});
+
+console.log(range);
+//=> ['xa0y', 'xb1y', 'xc2y', 'xd3y', 'xe4y']
+```
+
+See [expand-range](https://github.com/jonschlinkert/expand-range) for benchmarks, tests and the full list of range expansion features.
+
+## Options
+
+### options.makeRe
+
+Type: `Boolean`
+
+Deafault: `false`
+
+Return a regex-optimal string. If you're using braces to generate regex, this will result in dramatically faster performance.
+
+**Examples**
+
+With the default settings (`{makeRe: false}`):
+
+```js
+braces('{1..5}');
+//=> ['1', '2', '3', '4', '5']
+```
+
+With `{makeRe: true}`:
+
+```js
+braces('{1..5}', {makeRe: true});
+//=> ['[1-5]']
+
+braces('{3..9..3}', {makeRe: true});
+//=> ['(3|6|9)']
+```
+
+### options.bash
+
+Type: `Boolean`
+
+Default: `false`
+
+Enables complete support for the Bash specification. The downside is a 20-25% speed decrease.
+
+**Example**
+
+Using the default setting (`{bash: false}`):
+
+```js
+braces('a{b}c');
+//=> ['abc']
+```
+
+In bash (and minimatch), braces with one item are not expanded. To get the same result with braces, set `{bash: true}`:
+
+```js
+braces('a{b}c', {bash: true});
+//=> ['a{b}c']
+```
+
+### options.nodupes
+
+Type: `Boolean`
+
+Deafault: `true`
+
+Duplicates are removed by default. To keep duplicates, pass `{nodupes: false}` on the options
+
+## Bash 4.3 Support
+
+> Better support for Bash 4.3 than minimatch
+
+This project has comprehensive unit tests, including tests coverted from [Bash 4.3](www.gnu.org/software/bash/). Currently only 8 of 102 unit tests fail, and
+
+## Run benchmarks
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm benchmark
+```
+
+### Latest results
+
+```bash
+#1: escape.js
+ brace-expansion.js x 114,934 ops/sec ±1.24% (93 runs sampled)
+ braces.js x 342,254 ops/sec ±0.84% (90 runs sampled)
+
+#2: exponent.js
+ brace-expansion.js x 12,359 ops/sec ±0.86% (96 runs sampled)
+ braces.js x 20,389 ops/sec ±0.71% (97 runs sampled)
+
+#3: multiple.js
+ brace-expansion.js x 114,469 ops/sec ±1.44% (94 runs sampled)
+ braces.js x 401,621 ops/sec ±0.87% (91 runs sampled)
+
+#4: nested.js
+ brace-expansion.js x 102,769 ops/sec ±1.55% (92 runs sampled)
+ braces.js x 314,088 ops/sec ±0.71% (98 runs sampled)
+
+#5: normal.js
+ brace-expansion.js x 157,577 ops/sec ±1.65% (91 runs sampled)
+ braces.js x 1,115,950 ops/sec ±0.74% (94 runs sampled)
+
+#6: range.js
+ brace-expansion.js x 138,822 ops/sec ±1.71% (91 runs sampled)
+ braces.js x 1,108,353 ops/sec ±0.85% (94 runs sampled)
+```
+
+## Related projects
+
+You might also be interested in these projects:
+
+* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://www.npmjs.com/package/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range)
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://www.npmjs.com/package/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range)
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/braces/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/braces/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on May 21, 2016._
\ No newline at end of file
diff --git a/node_modules/braces/index.js b/node_modules/braces/index.js
new file mode 100644
index 0000000..3b4c58d
--- /dev/null
+++ b/node_modules/braces/index.js
@@ -0,0 +1,399 @@
+/*!
+ * braces
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var expand = require('expand-range');
+var repeat = require('repeat-element');
+var tokens = require('preserve');
+
+/**
+ * Expose `braces`
+ */
+
+module.exports = function(str, options) {
+ if (typeof str !== 'string') {
+ throw new Error('braces expects a string');
+ }
+ return braces(str, options);
+};
+
+/**
+ * Expand `{foo,bar}` or `{1..5}` braces in the
+ * given `string`.
+ *
+ * @param {String} `str`
+ * @param {Array} `arr`
+ * @param {Object} `options`
+ * @return {Array}
+ */
+
+function braces(str, arr, options) {
+ if (str === '') {
+ return [];
+ }
+
+ if (!Array.isArray(arr)) {
+ options = arr;
+ arr = [];
+ }
+
+ var opts = options || {};
+ arr = arr || [];
+
+ if (typeof opts.nodupes === 'undefined') {
+ opts.nodupes = true;
+ }
+
+ var fn = opts.fn;
+ var es6;
+
+ if (typeof opts === 'function') {
+ fn = opts;
+ opts = {};
+ }
+
+ if (!(patternRe instanceof RegExp)) {
+ patternRe = patternRegex();
+ }
+
+ var matches = str.match(patternRe) || [];
+ var m = matches[0];
+
+ switch(m) {
+ case '\\,':
+ return escapeCommas(str, arr, opts);
+ case '\\.':
+ return escapeDots(str, arr, opts);
+ case '\/.':
+ return escapePaths(str, arr, opts);
+ case ' ':
+ return splitWhitespace(str);
+ case '{,}':
+ return exponential(str, opts, braces);
+ case '{}':
+ return emptyBraces(str, arr, opts);
+ case '\\{':
+ case '\\}':
+ return escapeBraces(str, arr, opts);
+ case '${':
+ if (!/\{[^{]+\{/.test(str)) {
+ return arr.concat(str);
+ } else {
+ es6 = true;
+ str = tokens.before(str, es6Regex());
+ }
+ }
+
+ if (!(braceRe instanceof RegExp)) {
+ braceRe = braceRegex();
+ }
+
+ var match = braceRe.exec(str);
+ if (match == null) {
+ return [str];
+ }
+
+ var outter = match[1];
+ var inner = match[2];
+ if (inner === '') { return [str]; }
+
+ var segs, segsLength;
+
+ if (inner.indexOf('..') !== -1) {
+ segs = expand(inner, opts, fn) || inner.split(',');
+ segsLength = segs.length;
+
+ } else if (inner[0] === '"' || inner[0] === '\'') {
+ return arr.concat(str.split(/['"]/).join(''));
+
+ } else {
+ segs = inner.split(',');
+ if (opts.makeRe) {
+ return braces(str.replace(outter, wrap(segs, '|')), opts);
+ }
+
+ segsLength = segs.length;
+ if (segsLength === 1 && opts.bash) {
+ segs[0] = wrap(segs[0], '\\');
+ }
+ }
+
+ var len = segs.length;
+ var i = 0, val;
+
+ while (len--) {
+ var path = segs[i++];
+
+ if (/(\.[^.\/])/.test(path)) {
+ if (segsLength > 1) {
+ return segs;
+ } else {
+ return [str];
+ }
+ }
+
+ val = splice(str, outter, path);
+
+ if (/\{[^{}]+?\}/.test(val)) {
+ arr = braces(val, arr, opts);
+ } else if (val !== '') {
+ if (opts.nodupes && arr.indexOf(val) !== -1) { continue; }
+ arr.push(es6 ? tokens.after(val) : val);
+ }
+ }
+
+ if (opts.strict) { return filter(arr, filterEmpty); }
+ return arr;
+}
+
+/**
+ * Expand exponential ranges
+ *
+ * `a{,}{,}` => ['a', 'a', 'a', 'a']
+ */
+
+function exponential(str, options, fn) {
+ if (typeof options === 'function') {
+ fn = options;
+ options = null;
+ }
+
+ var opts = options || {};
+ var esc = '__ESC_EXP__';
+ var exp = 0;
+ var res;
+
+ var parts = str.split('{,}');
+ if (opts.nodupes) {
+ return fn(parts.join(''), opts);
+ }
+
+ exp = parts.length - 1;
+ res = fn(parts.join(esc), opts);
+ var len = res.length;
+ var arr = [];
+ var i = 0;
+
+ while (len--) {
+ var ele = res[i++];
+ var idx = ele.indexOf(esc);
+
+ if (idx === -1) {
+ arr.push(ele);
+
+ } else {
+ ele = ele.split('__ESC_EXP__').join('');
+ if (!!ele && opts.nodupes !== false) {
+ arr.push(ele);
+
+ } else {
+ var num = Math.pow(2, exp);
+ arr.push.apply(arr, repeat(ele, num));
+ }
+ }
+ }
+ return arr;
+}
+
+/**
+ * Wrap a value with parens, brackets or braces,
+ * based on the given character/separator.
+ *
+ * @param {String|Array} `val`
+ * @param {String} `ch`
+ * @return {String}
+ */
+
+function wrap(val, ch) {
+ if (ch === '|') {
+ return '(' + val.join(ch) + ')';
+ }
+ if (ch === ',') {
+ return '{' + val.join(ch) + '}';
+ }
+ if (ch === '-') {
+ return '[' + val.join(ch) + ']';
+ }
+ if (ch === '\\') {
+ return '\\{' + val + '\\}';
+ }
+}
+
+/**
+ * Handle empty braces: `{}`
+ */
+
+function emptyBraces(str, arr, opts) {
+ return braces(str.split('{}').join('\\{\\}'), arr, opts);
+}
+
+/**
+ * Filter out empty-ish values
+ */
+
+function filterEmpty(ele) {
+ return !!ele && ele !== '\\';
+}
+
+/**
+ * Handle patterns with whitespace
+ */
+
+function splitWhitespace(str) {
+ var segs = str.split(' ');
+ var len = segs.length;
+ var res = [];
+ var i = 0;
+
+ while (len--) {
+ res.push.apply(res, braces(segs[i++]));
+ }
+ return res;
+}
+
+/**
+ * Handle escaped braces: `\\{foo,bar}`
+ */
+
+function escapeBraces(str, arr, opts) {
+ if (!/\{[^{]+\{/.test(str)) {
+ return arr.concat(str.split('\\').join(''));
+ } else {
+ str = str.split('\\{').join('__LT_BRACE__');
+ str = str.split('\\}').join('__RT_BRACE__');
+ return map(braces(str, arr, opts), function(ele) {
+ ele = ele.split('__LT_BRACE__').join('{');
+ return ele.split('__RT_BRACE__').join('}');
+ });
+ }
+}
+
+/**
+ * Handle escaped dots: `{1\\.2}`
+ */
+
+function escapeDots(str, arr, opts) {
+ if (!/[^\\]\..+\\\./.test(str)) {
+ return arr.concat(str.split('\\').join(''));
+ } else {
+ str = str.split('\\.').join('__ESC_DOT__');
+ return map(braces(str, arr, opts), function(ele) {
+ return ele.split('__ESC_DOT__').join('.');
+ });
+ }
+}
+
+/**
+ * Handle escaped dots: `{1\\.2}`
+ */
+
+function escapePaths(str, arr, opts) {
+ str = str.split('\/.').join('__ESC_PATH__');
+ return map(braces(str, arr, opts), function(ele) {
+ return ele.split('__ESC_PATH__').join('\/.');
+ });
+}
+
+/**
+ * Handle escaped commas: `{a\\,b}`
+ */
+
+function escapeCommas(str, arr, opts) {
+ if (!/\w,/.test(str)) {
+ return arr.concat(str.split('\\').join(''));
+ } else {
+ str = str.split('\\,').join('__ESC_COMMA__');
+ return map(braces(str, arr, opts), function(ele) {
+ return ele.split('__ESC_COMMA__').join(',');
+ });
+ }
+}
+
+/**
+ * Regex for common patterns
+ */
+
+function patternRegex() {
+ return /\${|( (?=[{,}])|(?=[{,}]) )|{}|{,}|\\,(?=.*[{}])|\/\.(?=.*[{}])|\\\.(?={)|\\{|\\}/;
+}
+
+/**
+ * Braces regex.
+ */
+
+function braceRegex() {
+ return /.*(\\?\{([^}]+)\})/;
+}
+
+/**
+ * es6 delimiter regex.
+ */
+
+function es6Regex() {
+ return /\$\{([^}]+)\}/;
+}
+
+var braceRe;
+var patternRe;
+
+/**
+ * Faster alternative to `String.replace()` when the
+ * index of the token to be replaces can't be supplied
+ */
+
+function splice(str, token, replacement) {
+ var i = str.indexOf(token);
+ return str.substr(0, i) + replacement
+ + str.substr(i + token.length);
+}
+
+/**
+ * Fast array map
+ */
+
+function map(arr, fn) {
+ if (arr == null) {
+ return [];
+ }
+
+ var len = arr.length;
+ var res = new Array(len);
+ var i = -1;
+
+ while (++i < len) {
+ res[i] = fn(arr[i], i, arr);
+ }
+
+ return res;
+}
+
+/**
+ * Fast array filter
+ */
+
+function filter(arr, cb) {
+ if (arr == null) return [];
+ if (typeof cb !== 'function') {
+ throw new TypeError('braces: filter expects a callback function.');
+ }
+
+ var len = arr.length;
+ var res = arr.slice();
+ var i = 0;
+
+ while (len--) {
+ if (!cb(arr[len], i++)) {
+ res.splice(len, 1);
+ }
+ }
+ return res;
+}
diff --git a/node_modules/braces/package.json b/node_modules/braces/package.json
new file mode 100644
index 0000000..791f18c
--- /dev/null
+++ b/node_modules/braces/package.json
@@ -0,0 +1,157 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "braces@^1.8.2",
+ "scope": null,
+ "escapedName": "braces",
+ "name": "braces",
+ "rawSpec": "^1.8.2",
+ "spec": ">=1.8.2 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/micromatch"
+ ]
+ ],
+ "_from": "braces@>=1.8.2 <2.0.0",
+ "_id": "braces@1.8.5",
+ "_inCache": true,
+ "_location": "/braces",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/braces-1.8.5.tgz_1463843581552_0.5618140168953687"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.6.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "braces@^1.8.2",
+ "scope": null,
+ "escapedName": "braces",
+ "name": "braces",
+ "rawSpec": "^1.8.2",
+ "spec": ">=1.8.2 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/micromatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+ "_shasum": "ba77962e12dff969d6b76711e914b737857bf6a7",
+ "_shrinkwrap": null,
+ "_spec": "braces@^1.8.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/braces/issues"
+ },
+ "dependencies": {
+ "expand-range": "^1.8.1",
+ "preserve": "^0.2.0",
+ "repeat-element": "^1.1.2"
+ },
+ "description": "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.",
+ "devDependencies": {
+ "benchmarked": "^0.1.5",
+ "brace-expansion": "^1.1.3",
+ "chalk": "^1.1.3",
+ "gulp-format-md": "^0.1.8",
+ "minimatch": "^3.0.0",
+ "minimist": "^1.2.0",
+ "mocha": "^2.4.5",
+ "should": "^8.3.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "ba77962e12dff969d6b76711e914b737857bf6a7",
+ "tarball": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "24874614ebeda1c5405180f1f6c9f374bcf384ce",
+ "homepage": "https://github.com/jonschlinkert/braces",
+ "keywords": [
+ "alpha",
+ "alphabetical",
+ "bash",
+ "brace",
+ "expand",
+ "expansion",
+ "filepath",
+ "fill",
+ "fs",
+ "glob",
+ "globbing",
+ "letter",
+ "match",
+ "matches",
+ "matching",
+ "number",
+ "numerical",
+ "path",
+ "range",
+ "ranges",
+ "sh"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "es128",
+ "email": "elan.shanker+npm@gmail.com"
+ },
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ }
+ ],
+ "name": "braces",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/braces.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb"
+ ],
+ "toc": false,
+ "layout": "default",
+ "lint": {
+ "reflinks": true
+ },
+ "tasks": [
+ "readme"
+ ],
+ "related": {
+ "list": [
+ "micromatch",
+ "expand-range",
+ "fill-range"
+ ]
+ }
+ },
+ "version": "1.8.5"
+}
diff --git a/node_modules/buffer-shims/index.js b/node_modules/buffer-shims/index.js
new file mode 100644
index 0000000..1cab4c0
--- /dev/null
+++ b/node_modules/buffer-shims/index.js
@@ -0,0 +1,108 @@
+'use strict';
+
+var buffer = require('buffer');
+var Buffer = buffer.Buffer;
+var SlowBuffer = buffer.SlowBuffer;
+var MAX_LEN = buffer.kMaxLength || 2147483647;
+exports.alloc = function alloc(size, fill, encoding) {
+ if (typeof Buffer.alloc === 'function') {
+ return Buffer.alloc(size, fill, encoding);
+ }
+ if (typeof encoding === 'number') {
+ throw new TypeError('encoding must not be number');
+ }
+ if (typeof size !== 'number') {
+ throw new TypeError('size must be a number');
+ }
+ if (size > MAX_LEN) {
+ throw new RangeError('size is too large');
+ }
+ var enc = encoding;
+ var _fill = fill;
+ if (_fill === undefined) {
+ enc = undefined;
+ _fill = 0;
+ }
+ var buf = new Buffer(size);
+ if (typeof _fill === 'string') {
+ var fillBuf = new Buffer(_fill, enc);
+ var flen = fillBuf.length;
+ var i = -1;
+ while (++i < size) {
+ buf[i] = fillBuf[i % flen];
+ }
+ } else {
+ buf.fill(_fill);
+ }
+ return buf;
+}
+exports.allocUnsafe = function allocUnsafe(size) {
+ if (typeof Buffer.allocUnsafe === 'function') {
+ return Buffer.allocUnsafe(size);
+ }
+ if (typeof size !== 'number') {
+ throw new TypeError('size must be a number');
+ }
+ if (size > MAX_LEN) {
+ throw new RangeError('size is too large');
+ }
+ return new Buffer(size);
+}
+exports.from = function from(value, encodingOrOffset, length) {
+ if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
+ return Buffer.from(value, encodingOrOffset, length);
+ }
+ if (typeof value === 'number') {
+ throw new TypeError('"value" argument must not be a number');
+ }
+ if (typeof value === 'string') {
+ return new Buffer(value, encodingOrOffset);
+ }
+ if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
+ var offset = encodingOrOffset;
+ if (arguments.length === 1) {
+ return new Buffer(value);
+ }
+ if (typeof offset === 'undefined') {
+ offset = 0;
+ }
+ var len = length;
+ if (typeof len === 'undefined') {
+ len = value.byteLength - offset;
+ }
+ if (offset >= value.byteLength) {
+ throw new RangeError('\'offset\' is out of bounds');
+ }
+ if (len > value.byteLength - offset) {
+ throw new RangeError('\'length\' is out of bounds');
+ }
+ return new Buffer(value.slice(offset, offset + len));
+ }
+ if (Buffer.isBuffer(value)) {
+ var out = new Buffer(value.length);
+ value.copy(out, 0, 0, value.length);
+ return out;
+ }
+ if (value) {
+ if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
+ return new Buffer(value);
+ }
+ if (value.type === 'Buffer' && Array.isArray(value.data)) {
+ return new Buffer(value.data);
+ }
+ }
+
+ throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
+}
+exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
+ if (typeof Buffer.allocUnsafeSlow === 'function') {
+ return Buffer.allocUnsafeSlow(size);
+ }
+ if (typeof size !== 'number') {
+ throw new TypeError('size must be a number');
+ }
+ if (size >= MAX_LEN) {
+ throw new RangeError('size is too large');
+ }
+ return new SlowBuffer(size);
+}
diff --git a/node_modules/buffer-shims/license.md b/node_modules/buffer-shims/license.md
new file mode 100644
index 0000000..01cfaef
--- /dev/null
+++ b/node_modules/buffer-shims/license.md
@@ -0,0 +1,19 @@
+# Copyright (c) 2016 Calvin Metcalf
+
+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/node_modules/buffer-shims/package.json b/node_modules/buffer-shims/package.json
new file mode 100644
index 0000000..5eeae28
--- /dev/null
+++ b/node_modules/buffer-shims/package.json
@@ -0,0 +1,86 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "buffer-shims@~1.0.0",
+ "scope": null,
+ "escapedName": "buffer-shims",
+ "name": "buffer-shims",
+ "rawSpec": "~1.0.0",
+ "spec": ">=1.0.0 <1.1.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/through2/node_modules/readable-stream"
+ ]
+ ],
+ "_from": "buffer-shims@>=1.0.0 <1.1.0",
+ "_id": "buffer-shims@1.0.0",
+ "_inCache": true,
+ "_location": "/buffer-shims",
+ "_nodeVersion": "5.11.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/buffer-shims-1.0.0.tgz_1462560889323_0.8640750856138766"
+ },
+ "_npmUser": {
+ "name": "cwmma",
+ "email": "calvin.metcalf@gmail.com"
+ },
+ "_npmVersion": "3.8.6",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "buffer-shims@~1.0.0",
+ "scope": null,
+ "escapedName": "buffer-shims",
+ "name": "buffer-shims",
+ "rawSpec": "~1.0.0",
+ "spec": ">=1.0.0 <1.1.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/through2/readable-stream",
+ "/through2/string_decoder"
+ ],
+ "_resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "_shasum": "9978ce317388c649ad8793028c3477ef044a8b51",
+ "_shrinkwrap": null,
+ "_spec": "buffer-shims@~1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/through2/node_modules/readable-stream",
+ "bugs": {
+ "url": "https://github.com/calvinmetcalf/buffer-shims/issues"
+ },
+ "dependencies": {},
+ "description": "some shims for node buffers",
+ "devDependencies": {
+ "tape": "^4.5.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "9978ce317388c649ad8793028c3477ef044a8b51",
+ "tarball": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "ea89b3857ab5b8203957922a84e9a48cf4c47e0a",
+ "homepage": "https://github.com/calvinmetcalf/buffer-shims#readme",
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "cwmma",
+ "email": "calvin.metcalf@gmail.com"
+ }
+ ],
+ "name": "buffer-shims",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/calvinmetcalf/buffer-shims.git"
+ },
+ "scripts": {
+ "test": "tape test/*.js"
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/buffer-shims/readme.md b/node_modules/buffer-shims/readme.md
new file mode 100644
index 0000000..7ea6475
--- /dev/null
+++ b/node_modules/buffer-shims/readme.md
@@ -0,0 +1,21 @@
+buffer-shims
+===
+
+functions to make sure the new buffer methods work in older browsers.
+
+```js
+var bufferShim = require('buffer-shims');
+bufferShim.from('foo');
+bufferShim.alloc(9, 'cafeface', 'hex');
+bufferShim.allocUnsafe(15);
+bufferShim.allocUnsafeSlow(21);
+```
+
+should just use the original in newer nodes and on older nodes uses fallbacks.
+
+Known Issues
+===
+- this does not patch the buffer object, only the constructor stuff
+- it's actually a polyfill
+
+
diff --git a/node_modules/buffer-writer/.npmignore b/node_modules/buffer-writer/.npmignore
new file mode 100644
index 0000000..9f60d21
--- /dev/null
+++ b/node_modules/buffer-writer/.npmignore
@@ -0,0 +1,2 @@
+benchmark/versions/
+node_modules
diff --git a/node_modules/buffer-writer/.travis.yml b/node_modules/buffer-writer/.travis.yml
new file mode 100644
index 0000000..ed178f6
--- /dev/null
+++ b/node_modules/buffer-writer/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.8
+ - 0.9
diff --git a/node_modules/buffer-writer/LICENSE b/node_modules/buffer-writer/LICENSE
new file mode 100644
index 0000000..72dc60d
--- /dev/null
+++ b/node_modules/buffer-writer/LICENSE
@@ -0,0 +1,19 @@
+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.
diff --git a/node_modules/buffer-writer/README.md b/node_modules/buffer-writer/README.md
new file mode 100644
index 0000000..81eccc0
--- /dev/null
+++ b/node_modules/buffer-writer/README.md
@@ -0,0 +1,48 @@
+# buffer-writer
+
+[](http://travis-ci.org/brianc/node-buffer-writer)
+
+Fast & efficient buffer writer used to keep memory usage low by internally recycling a single large buffer.
+
+Used as the binary protocol writer in [node-postgres](https://github.com/brianc/node-postgres)
+
+Since postgres requires big endian encoding, this only writes big endian numbers for now, but can & probably will easily be extended to write little endian as well.
+
+I'll admit this has a few postgres specific things I might need to take out in the future, such as `addHeader`
+
+## api
+
+`var writer = new (require('buffer-writer')());`
+
+### writer.addInt32(num)
+
+Writes a 4-byte big endian binary encoded number to the end of the buffer.
+
+### writer.addInt16(num)
+
+Writes a 2-byte big endian binary encoded number to the end of the buffer.
+
+### writer.addCString(string)
+
+Writes a string to the buffer `utf8` encoded and adds a null character (`\0`) at the end.
+
+### var buffer = writer.addHeader(char)
+
+Writes the 5 byte PostgreSQL required header to the beginning of the buffer. (1 byte for character, 1 BE Int32 for length of the buffer)
+
+### var buffer = writer.join()
+
+Collects all data in the writer and joins it into a single, new buffer.
+
+### var buffer = writer.flush(char)
+
+Writes the 5 byte postgres required message header, collects all data in the writer and joins it into a single, new buffer, and then resets the writer.
+
+## thoughts
+
+This is kind of node-postgres specific. If you're interested in using this for a more general purpose thing, lemme know.
+I would love to work with you on getting this more reusable for your needs.
+
+## license
+
+MIT
diff --git a/node_modules/buffer-writer/benchmark/index.js b/node_modules/buffer-writer/benchmark/index.js
new file mode 100644
index 0000000..69d8f4b
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/index.js
@@ -0,0 +1,86 @@
+var fs = require('fs');
+var path = require('path');
+
+var bench = require('bench');
+var async = require('async');
+var rmdir = require('rmdir');
+var ok = require('okay');
+var cloned = require('cloned');
+cloned.workingDir = __dirname + '/versions';
+
+exports.compare = {
+ 'math': function() {
+ var two = 1 + 1;
+ },
+ 'another': function() {
+ var yay = 2 + 2;
+ }
+};
+
+var clone = function(rev, cb) {
+ var outputDir = path.join(cloned.workingDir, rev);
+ console.log(outputDir)
+ if(fs.existsSync(outputDir)) {
+ return cb(null, {
+ rev: rev,
+ dir: outputDir
+ });
+ }
+ console.log('cloning version ' + rev);
+ cloned(rev, ok(cb, function(dir) {
+ console.log('cloned version ' + rev + ' to ' + dir);
+ cb(null, {
+ rev: rev,
+ dir: dir
+ });
+ }));
+};
+
+var versions = [
+ 'ef599d3'
+];
+
+var scripts = fs.readdirSync(__dirname).filter(function(x) {
+ return x.indexOf('benchmark') > 0;
+});
+
+if(process.argv[2]) {
+ scripts = [process.argv[2]]
+}
+
+
+var run = function() {
+ async.map(versions, clone, function(err, results) {
+ if(err) throw err;
+ exports.compare = { };
+ var suites = [];
+ scripts.forEach(function(script) {
+ for(var i = 0; i < results.length; i++) {
+ var result = results[i];
+ var benchPath = path.join(result.dir, 'benchmark', script);
+ var suite = {};
+ suites.push(suite);
+ if(fs.existsSync(benchPath)) {
+ var bench = require(benchPath);
+ suite[script + '@' + result.rev] = bench;
+ } else {
+ console.log('%s missing at revision %s', benchPath, result.rev);
+ }
+ }
+ suite[script + '@HEAD'] = require(__dirname + '/' + script);
+ });
+ var compare = function(suite, cb) {
+ console.log('running...')
+ bench.compare(suite, null, null, null, function(err, data) {
+ if(err) return cb(err);
+ bench.show(data);
+ cb(null);
+ });
+ }
+ async.eachSeries(suites, compare, function(err, res) {
+ console.log('all suites done')
+ })
+ });
+};
+
+run();
diff --git a/node_modules/buffer-writer/benchmark/int-16-benchmark.js b/node_modules/buffer-writer/benchmark/int-16-benchmark.js
new file mode 100644
index 0000000..4a4e676
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/int-16-benchmark.js
@@ -0,0 +1,31 @@
+var Writer = require(__dirname + '/../');
+
+module.exports = function() {
+ var writer = new Writer();
+ writer.addInt16(-100000000);
+ writer.addInt16(-1000);
+ writer.addInt16(-1);
+ writer.addInt16(0);
+ writer.addInt16(1);
+ writer.addInt16(1000);
+ writer.addInt16(1000000000);
+ writer.addInt16(-100000000);
+ writer.addInt16(-100000000);
+ writer.addInt16(-1000);
+ writer.addInt16(-1);
+ writer.addInt16(0);
+ writer.addInt16(1);
+ writer.addInt16(1000);
+ writer.addInt16(1000000000);
+ writer.addInt16(-1000);
+ writer.addInt16(-1);
+ writer.addInt16(0);
+ writer.addInt16(1);
+ writer.addInt16(1000);
+ writer.addInt16(1000000000);
+};
+
+if(!module.parent) {
+ module.exports();
+ console.log('benchmark ok');
+}
diff --git a/node_modules/buffer-writer/benchmark/int-32-benchmark.js b/node_modules/buffer-writer/benchmark/int-32-benchmark.js
new file mode 100644
index 0000000..bff4ace
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/int-32-benchmark.js
@@ -0,0 +1,17 @@
+var Writer = require(__dirname + '/../');
+
+module.exports = function() {
+ var writer = new Writer();
+ writer.addInt32(-10000000000000);
+ writer.addInt32(-1000);
+ writer.addInt32(-1);
+ writer.addInt32(0);
+ writer.addInt32(1);
+ writer.addInt32(1000);
+ writer.addInt32(10000000000000);
+};
+
+if(!module.parent) {
+ module.exports();
+ console.log('benchmark ok');
+}
diff --git a/node_modules/buffer-writer/benchmark/join-benchmark.js b/node_modules/buffer-writer/benchmark/join-benchmark.js
new file mode 100644
index 0000000..49e4238
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/join-benchmark.js
@@ -0,0 +1,16 @@
+var Writer = require(__dirname + '/../');
+
+var writer = new Writer();
+writer.addCString('hello');
+writer.addCString('something else, really');
+writer.addInt32(38013);
+writer.addCString('and that\'s all she wrote, folks\n...\n...not really');
+
+module.exports = function() {
+ writer.join(0x50);
+};
+
+if(!module.parent) {
+ module.exports();
+ console.log('benchmark ok');
+}
diff --git a/node_modules/buffer-writer/benchmark/resize-benchmark.js b/node_modules/buffer-writer/benchmark/resize-benchmark.js
new file mode 100644
index 0000000..3845566
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/resize-benchmark.js
@@ -0,0 +1,23 @@
+var Writer = require(__dirname + '/../');
+
+var string = "";
+for(var i = 0; i < 10; i++) {
+ string += 'Once upon a time long ago there lived a little programming language named JavaScript';
+}
+
+module.exports = function() {
+ var writer = new Writer(4);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+ writer.addCString(string);
+};
+
+if(!module.parent) {
+ module.exports();
+ console.log('benchmark ok');
+}
diff --git a/node_modules/buffer-writer/benchmark/small-benchmark.js b/node_modules/buffer-writer/benchmark/small-benchmark.js
new file mode 100644
index 0000000..1c129f3
--- /dev/null
+++ b/node_modules/buffer-writer/benchmark/small-benchmark.js
@@ -0,0 +1,14 @@
+var Writer = require(__dirname + '/../');
+
+module.exports = function() {
+ var writer = new Writer();
+ writer.addInt32(10);
+ writer.addInt16(5);
+ writer.addCString('test');
+ writer.flush('X');
+};
+
+if(!module.parent) {
+ module.exports();
+ console.log('benchmark ok');
+}
diff --git a/node_modules/buffer-writer/index.js b/node_modules/buffer-writer/index.js
new file mode 100644
index 0000000..d4b463e
--- /dev/null
+++ b/node_modules/buffer-writer/index.js
@@ -0,0 +1,129 @@
+//binary data writer tuned for creating
+//postgres message packets as effeciently as possible by reusing the
+//same buffer to avoid memcpy and limit memory allocations
+var Writer = module.exports = function(size) {
+ this.size = size || 1024;
+ this.buffer = Buffer(this.size + 5);
+ this.offset = 5;
+ this.headerPosition = 0;
+};
+
+//resizes internal buffer if not enough size left
+Writer.prototype._ensure = function(size) {
+ var remaining = this.buffer.length - this.offset;
+ if(remaining < size) {
+ var oldBuffer = this.buffer;
+ // exponential growth factor of around ~ 1.5
+ // https://stackoverflow.com/questions/2269063/buffer-growth-strategy
+ var newSize = oldBuffer.length + (oldBuffer.length >> 1) + size;
+ this.buffer = new Buffer(newSize);
+ oldBuffer.copy(this.buffer);
+ }
+};
+
+Writer.prototype.addInt32 = function(num) {
+ this._ensure(4);
+ this.buffer[this.offset++] = (num >>> 24 & 0xFF);
+ this.buffer[this.offset++] = (num >>> 16 & 0xFF);
+ this.buffer[this.offset++] = (num >>> 8 & 0xFF);
+ this.buffer[this.offset++] = (num >>> 0 & 0xFF);
+ return this;
+};
+
+Writer.prototype.addInt16 = function(num) {
+ this._ensure(2);
+ this.buffer[this.offset++] = (num >>> 8 & 0xFF);
+ this.buffer[this.offset++] = (num >>> 0 & 0xFF);
+ return this;
+};
+
+//for versions of node requiring 'length' as 3rd argument to buffer.write
+var writeString = function(buffer, string, offset, len) {
+ buffer.write(string, offset, len);
+};
+
+//overwrite function for older versions of node
+if(Buffer.prototype.write.length === 3) {
+ writeString = function(buffer, string, offset, len) {
+ buffer.write(string, offset);
+ };
+}
+
+Writer.prototype.addCString = function(string) {
+ //just write a 0 for empty or null strings
+ if(!string) {
+ this._ensure(1);
+ } else {
+ var len = Buffer.byteLength(string);
+ this._ensure(len + 1); //+1 for null terminator
+ writeString(this.buffer, string, this.offset, len);
+ this.offset += len;
+ }
+
+ this.buffer[this.offset++] = 0; // null terminator
+ return this;
+};
+
+Writer.prototype.addChar = function(c) {
+ this._ensure(1);
+ writeString(this.buffer, c, this.offset, 1);
+ this.offset++;
+ return this;
+};
+
+Writer.prototype.addString = function(string) {
+ string = string || "";
+ var len = Buffer.byteLength(string);
+ this._ensure(len);
+ this.buffer.write(string, this.offset);
+ this.offset += len;
+ return this;
+};
+
+Writer.prototype.getByteLength = function() {
+ return this.offset - 5;
+};
+
+Writer.prototype.add = function(otherBuffer) {
+ this._ensure(otherBuffer.length);
+ otherBuffer.copy(this.buffer, this.offset);
+ this.offset += otherBuffer.length;
+ return this;
+};
+
+Writer.prototype.clear = function() {
+ this.offset = 5;
+ this.headerPosition = 0;
+ this.lastEnd = 0;
+};
+
+//appends a header block to all the written data since the last
+//subsequent header or to the beginning if there is only one data block
+Writer.prototype.addHeader = function(code, last) {
+ var origOffset = this.offset;
+ this.offset = this.headerPosition;
+ this.buffer[this.offset++] = code;
+ //length is everything in this packet minus the code
+ this.addInt32(origOffset - (this.headerPosition+1));
+ //set next header position
+ this.headerPosition = origOffset;
+ //make space for next header
+ this.offset = origOffset;
+ if(!last) {
+ this._ensure(5);
+ this.offset += 5;
+ }
+};
+
+Writer.prototype.join = function(code) {
+ if(code) {
+ this.addHeader(code, true);
+ }
+ return this.buffer.slice(code ? 0 : 5, this.offset);
+};
+
+Writer.prototype.flush = function(code) {
+ var result = this.join(code);
+ this.clear();
+ return result;
+};
diff --git a/node_modules/buffer-writer/package.json b/node_modules/buffer-writer/package.json
new file mode 100644
index 0000000..1a147ef
--- /dev/null
+++ b/node_modules/buffer-writer/package.json
@@ -0,0 +1,97 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "buffer-writer@1.0.1",
+ "scope": null,
+ "escapedName": "buffer-writer",
+ "name": "buffer-writer",
+ "rawSpec": "1.0.1",
+ "spec": "1.0.1",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/pg"
+ ]
+ ],
+ "_from": "buffer-writer@1.0.1",
+ "_id": "buffer-writer@1.0.1",
+ "_inCache": true,
+ "_location": "/buffer-writer",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-5-east.internal.npmjs.com",
+ "tmp": "tmp/buffer-writer-1.0.1.tgz_1455554615929_0.2564993395935744"
+ },
+ "_npmUser": {
+ "name": "brianc",
+ "email": "brian.m.carlson@gmail.com"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "buffer-writer@1.0.1",
+ "scope": null,
+ "escapedName": "buffer-writer",
+ "name": "buffer-writer",
+ "rawSpec": "1.0.1",
+ "spec": "1.0.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/pg"
+ ],
+ "_resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz",
+ "_shasum": "22a936901e3029afcd7547eb4487ceb697a3bf08",
+ "_shrinkwrap": null,
+ "_spec": "buffer-writer@1.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/pg",
+ "author": {
+ "name": "Brian M. Carlson"
+ },
+ "bugs": {
+ "url": "https://github.com/brianc/node-buffer-writer/issues"
+ },
+ "dependencies": {},
+ "description": "a fast, efficient buffer writer",
+ "devDependencies": {
+ "async": "~0.2.6",
+ "bench": "~0.3.5",
+ "benchmark": "~1.0.0",
+ "cloned": "0.0.1",
+ "microtime": "~0.3.3",
+ "mocha": "~1.8.1",
+ "okay": "0.0.2",
+ "rmdir": "~1.0.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "22a936901e3029afcd7547eb4487ceb697a3bf08",
+ "tarball": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz"
+ },
+ "gitHead": "d7c48cb142d87d76662954359bf1abcd25144329",
+ "homepage": "https://github.com/brianc/node-buffer-writer#readme",
+ "keywords": [
+ "buffer",
+ "writer",
+ "builder"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "brianc",
+ "email": "brian.m.carlson@gmail.com"
+ }
+ ],
+ "name": "buffer-writer",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/brianc/node-buffer-writer.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "1.0.1"
+}
diff --git a/node_modules/buffer-writer/test/mocha.opts b/node_modules/buffer-writer/test/mocha.opts
new file mode 100644
index 0000000..5efaf24
--- /dev/null
+++ b/node_modules/buffer-writer/test/mocha.opts
@@ -0,0 +1 @@
+--ui tdd
diff --git a/node_modules/buffer-writer/test/writer-tests.js b/node_modules/buffer-writer/test/writer-tests.js
new file mode 100644
index 0000000..685298a
--- /dev/null
+++ b/node_modules/buffer-writer/test/writer-tests.js
@@ -0,0 +1,218 @@
+var Writer = require(__dirname + "/../");
+
+var assert = require('assert');
+var util = require('util');
+
+assert.equalBuffers = function(actual, expected) {
+ var spit = function(actual, expected) {
+ console.log("");
+ console.log("actual " + util.inspect(actual));
+ console.log("expect " + util.inspect(expected));
+ console.log("");
+ };
+ if(actual.length != expected.length) {
+ spit(actual, expected);
+ assert.equal(actual.length, expected.length);
+ }
+ for(var i = 0; i < actual.length; i++) {
+ if(actual[i] != expected[i]) {
+ spit(actual, expected);
+ }
+ assert.equal(actual[i],expected[i]);
+ }
+};
+
+suite('adding int32', function() {
+ var testAddingInt32 = function(int, expectedBuffer) {
+ test('writes ' + int, function() {
+ var subject = new Writer();
+ var result = subject.addInt32(int).join();
+ assert.equalBuffers(result, expectedBuffer);
+ });
+ };
+
+ testAddingInt32(0, [0, 0, 0, 0]);
+ testAddingInt32(1, [0, 0, 0, 1]);
+ testAddingInt32(256, [0, 0, 1, 0]);
+ test('writes largest int32', function() {
+ //todo need to find largest int32 when I have internet access
+ return false;
+ });
+
+ test('writing multiple int32s', function() {
+ var subject = new Writer();
+ var result = subject.addInt32(1).addInt32(10).addInt32(0).join();
+ assert.equalBuffers(result, [0, 0, 0, 1, 0, 0, 0, 0x0a, 0, 0, 0, 0]);
+ });
+
+ suite('having to resize the buffer', function() {
+ test('after resize correct result returned', function() {
+ var subject = new Writer(10);
+ subject.addInt32(1).addInt32(1).addInt32(1);
+ assert.equalBuffers(subject.join(), [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1]);
+ });
+ });
+});
+
+suite('int16', function() {
+ test('writes 0', function() {
+ var subject = new Writer();
+ var result = subject.addInt16(0).join();
+ assert.equalBuffers(result, [0,0]);
+ });
+
+ test('writes 400', function() {
+ var subject = new Writer();
+ var result = subject.addInt16(400).join();
+ assert.equalBuffers(result, [1, 0x90]);
+ });
+
+ test('writes many', function() {
+ var subject = new Writer();
+ var result = subject.addInt16(0).addInt16(1).addInt16(2).join();
+ assert.equalBuffers(result, [0, 0, 0, 1, 0, 2]);
+ });
+
+ test('resizes if internal buffer fills up', function() {
+ var subject = new Writer(3);
+ var result = subject.addInt16(2).addInt16(3).join();
+ assert.equalBuffers(result, [0, 2, 0, 3]);
+ });
+
+});
+
+suite('cString', function() {
+ test('writes empty cstring', function() {
+ var subject = new Writer();
+ var result = subject.addCString().join();
+ assert.equalBuffers(result, [0]);
+ });
+
+ test('writes two empty cstrings', function() {
+ var subject = new Writer();
+ var result = subject.addCString("").addCString("").join();
+ assert.equalBuffers(result, [0, 0]);
+ });
+
+
+ test('writes non-empty cstring', function() {
+ var subject = new Writer();
+ var result = subject.addCString("!!!").join();
+ assert.equalBuffers(result, [33, 33, 33, 0]);
+ });
+
+ test('resizes if reached end', function() {
+ var subject = new Writer(3);
+ var result = subject.addCString("!!!").join();
+ assert.equalBuffers(result, [33, 33, 33, 0]);
+ });
+
+ test('writes multiple cstrings', function() {
+ var subject = new Writer();
+ var result = subject.addCString("!").addCString("!").join();
+ assert.equalBuffers(result, [33, 0, 33, 0]);
+ });
+
+});
+
+test('writes char', function() {
+ var subject = new Writer(2);
+ var result = subject.addChar('a').addChar('b').addChar('c').join();
+ assert.equalBuffers(result, [0x61, 0x62, 0x63]);
+});
+
+test('gets correct byte length', function() {
+ var subject = new Writer(5);
+ assert.equal(subject.getByteLength(), 0);
+ subject.addInt32(0);
+ assert.equal(subject.getByteLength(), 4);
+ subject.addCString("!");
+ assert.equal(subject.getByteLength(), 6);
+});
+
+test('can add arbitrary buffer to the end', function() {
+ var subject = new Writer(4);
+ subject.addCString("!!!")
+ var result = subject.add(Buffer("@@@")).join();
+ assert.equalBuffers(result, [33, 33, 33, 0, 0x40, 0x40, 0x40]);
+});
+
+suite('can write normal string', function() {
+ var subject = new Writer(4);
+ var result = subject.addString("!").join();
+ assert.equalBuffers(result, [33]);
+ test('can write cString too', function() {
+ var result = subject.addCString("!").join();
+ assert.equalBuffers(result, [33, 33, 0]);
+ });
+ test('can resize', function() {
+ var result = subject.addString("!!").join();
+ assert.equalBuffers(result, [33, 33, 0, 33, 33]);
+ });
+});
+
+
+suite('clearing', function() {
+ var subject = new Writer();
+ subject.addCString("@!!#!#");
+ subject.addInt32(10401);
+ test('clears', function() {
+ subject.clear();
+ assert.equalBuffers(subject.join(), []);
+ });
+ test('writing more', function() {
+ var joinedResult = subject.addCString("!").addInt32(9).addInt16(2).join();
+ assert.equalBuffers(joinedResult, [33, 0, 0, 0, 0, 9, 0, 2]);
+ });
+ test('returns result', function() {
+ var flushedResult = subject.flush();
+ assert.equalBuffers(flushedResult, [33, 0, 0, 0, 0, 9, 0, 2])
+ });
+ test('clears the writer', function() {
+ assert.equalBuffers(subject.join(), [])
+ assert.equalBuffers(subject.flush(), [])
+ });
+});
+
+test("resizing to much larger", function() {
+ var subject = new Writer(2);
+ var string = "!!!!!!!!";
+ var result = subject.addCString(string).flush();
+ assert.equalBuffers(result, [33, 33, 33, 33, 33, 33, 33, 33, 0]);
+});
+
+suite("flush", function() {
+ test('added as a hex code to a full writer', function() {
+ var subject = new Writer(2);
+ var result = subject.addCString("!").flush(0x50);
+ assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0]);
+ });
+
+ test('added as a hex code to a non-full writer', function() {
+ var subject = new Writer(10).addCString("!");
+ var joinedResult = subject.join(0x50);
+ var result = subject.flush(0x50);
+ assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0]);
+ });
+
+ test('added as a hex code to a buffer which requires resizing', function() {
+ var result = new Writer(2).addCString("!!!!!!!!").flush(0x50);
+ assert.equalBuffers(result, [0x50, 0, 0, 0, 0x0D, 33, 33, 33, 33, 33, 33, 33, 33, 0]);
+ });
+});
+
+suite("header", function() {
+ test('adding two packets with headers', function() {
+ var subject = new Writer(10).addCString("!");
+ subject.addHeader(0x50);
+ subject.addCString("!!");
+ subject.addHeader(0x40);
+ subject.addCString("!");
+ var result = subject.flush(0x10);
+ assert.equalBuffers(result, [0x50, 0, 0, 0, 6, 33, 0, 0x40, 0, 0, 0, 7, 33, 33, 0, 0x10, 0, 0, 0, 6, 33, 0 ]);
+ });
+});
+
+
+
+
diff --git a/node_modules/builtin-modules/builtin-modules.json b/node_modules/builtin-modules/builtin-modules.json
new file mode 100644
index 0000000..72670f6
--- /dev/null
+++ b/node_modules/builtin-modules/builtin-modules.json
@@ -0,0 +1,35 @@
+[
+ "assert",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "dgram",
+ "dns",
+ "domain",
+ "events",
+ "fs",
+ "http",
+ "https",
+ "module",
+ "net",
+ "os",
+ "path",
+ "process",
+ "punycode",
+ "querystring",
+ "readline",
+ "repl",
+ "stream",
+ "string_decoder",
+ "timers",
+ "tls",
+ "tty",
+ "url",
+ "util",
+ "v8",
+ "vm",
+ "zlib"
+]
diff --git a/node_modules/builtin-modules/index.js b/node_modules/builtin-modules/index.js
new file mode 100644
index 0000000..9ef35ab
--- /dev/null
+++ b/node_modules/builtin-modules/index.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var blacklist = [
+ 'freelist',
+ 'sys'
+];
+
+module.exports = Object.keys(process.binding('natives')).filter(function (el) {
+ return !/^_|^internal|\//.test(el) && blacklist.indexOf(el) === -1;
+}).sort();
diff --git a/node_modules/builtin-modules/license b/node_modules/builtin-modules/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/builtin-modules/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/builtin-modules/package.json b/node_modules/builtin-modules/package.json
new file mode 100644
index 0000000..73e5177
--- /dev/null
+++ b/node_modules/builtin-modules/package.json
@@ -0,0 +1,104 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "builtin-modules@^1.0.0",
+ "scope": null,
+ "escapedName": "builtin-modules",
+ "name": "builtin-modules",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/is-builtin-module"
+ ]
+ ],
+ "_from": "builtin-modules@>=1.0.0 <2.0.0",
+ "_id": "builtin-modules@1.1.1",
+ "_inCache": true,
+ "_location": "/builtin-modules",
+ "_nodeVersion": "5.3.0",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "builtin-modules@^1.0.0",
+ "scope": null,
+ "escapedName": "builtin-modules",
+ "name": "builtin-modules",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/is-builtin-module"
+ ],
+ "_resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "_shasum": "270f076c5a72c02f5b65a47df94c5fe3a278892f",
+ "_shrinkwrap": null,
+ "_spec": "builtin-modules@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/is-builtin-module",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/builtin-modules/issues"
+ },
+ "dependencies": {},
+ "description": "List of the Node.js builtin modules",
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "270f076c5a72c02f5b65a47df94c5fe3a278892f",
+ "tarball": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "static.js",
+ "builtin-modules.json"
+ ],
+ "gitHead": "0ea253452b1d8cb3a70d16464f909dbc0bc370fe",
+ "homepage": "https://github.com/sindresorhus/builtin-modules#readme",
+ "keywords": [
+ "builtin",
+ "built-in",
+ "builtins",
+ "node",
+ "modules",
+ "core",
+ "bundled",
+ "list",
+ "array",
+ "names"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "builtin-modules",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/builtin-modules.git"
+ },
+ "scripts": {
+ "make": "node make.js",
+ "test": "xo && ava"
+ },
+ "version": "1.1.1"
+}
diff --git a/node_modules/builtin-modules/readme.md b/node_modules/builtin-modules/readme.md
new file mode 100644
index 0000000..f1894b1
--- /dev/null
+++ b/node_modules/builtin-modules/readme.md
@@ -0,0 +1,41 @@
+# builtin-modules [](https://travis-ci.org/sindresorhus/builtin-modules)
+
+> List of the Node.js builtin modules
+
+The list is just a [JSON file](builtin-modules.json) and can be used wherever.
+
+
+## Install
+
+```
+$ npm install --save builtin-modules
+```
+
+
+## Usage
+
+```js
+var builtinModules = require('builtin-modules');
+
+console.log(builinModules);
+//=> ['assert', 'buffer', ...]
+```
+
+
+## API
+
+Returns an array of builtin modules fetched from the running Node.js version.
+
+### Static list
+
+This module also comes bundled with a static array of builtin modules generated from the latest Node.js version. You can get it with `require('builtin-modules/static');`
+
+
+## Related
+
+- [is-builtin-module](https://github.com/sindresorhus/is-builtin-module) - Check if a string matches the name of a Node.js builtin module
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/builtin-modules/static.js b/node_modules/builtin-modules/static.js
new file mode 100644
index 0000000..9508f8f
--- /dev/null
+++ b/node_modules/builtin-modules/static.js
@@ -0,0 +1,2 @@
+'use strict';
+module.exports = require('./builtin-modules.json');
diff --git a/node_modules/bytes/History.md b/node_modules/bytes/History.md
new file mode 100644
index 0000000..56932a4
--- /dev/null
+++ b/node_modules/bytes/History.md
@@ -0,0 +1,70 @@
+2.4.0 / 2016-06-01
+==================
+
+ * Add option "unitSeparator"
+
+2.3.0 / 2016-02-15
+==================
+
+ * Drop partial bytes on all parsed units
+ * Fix non-finite numbers to `.format` to return `null`
+ * Fix parsing byte string that looks like hex
+ * perf: hoist regular expressions
+
+2.2.0 / 2015-11-13
+==================
+
+ * add option "decimalPlaces"
+ * add option "fixedDecimals"
+
+2.1.0 / 2015-05-21
+==================
+
+ * add `.format` export
+ * add `.parse` export
+
+2.0.2 / 2015-05-20
+==================
+
+ * remove map recreation
+ * remove unnecessary object construction
+
+2.0.1 / 2015-05-07
+==================
+
+ * fix browserify require
+ * remove node.extend dependency
+
+2.0.0 / 2015-04-12
+==================
+
+ * add option "case"
+ * add option "thousandsSeparator"
+ * return "null" on invalid parse input
+ * support proper round-trip: bytes(bytes(num)) === num
+ * units no longer case sensitive when parsing
+
+1.0.0 / 2014-05-05
+==================
+
+ * add negative support. fixes #6
+
+0.3.0 / 2014-03-19
+==================
+
+ * added terabyte support
+
+0.2.1 / 2013-04-01
+==================
+
+ * add .component
+
+0.2.0 / 2012-10-28
+==================
+
+ * bytes(200).should.eql('200b')
+
+0.1.0 / 2012-07-04
+==================
+
+ * add bytes to string conversion [yields]
diff --git a/node_modules/bytes/LICENSE b/node_modules/bytes/LICENSE
new file mode 100644
index 0000000..63e95a9
--- /dev/null
+++ b/node_modules/bytes/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2012-2014 TJ Holowaychuk
+Copyright (c) 2015 Jed Watson
+
+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/node_modules/bytes/Readme.md b/node_modules/bytes/Readme.md
new file mode 100644
index 0000000..7465fde
--- /dev/null
+++ b/node_modules/bytes/Readme.md
@@ -0,0 +1,114 @@
+# Bytes utility
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Build Status][travis-image]][travis-url]
+
+Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa.
+
+## Usage
+
+```js
+var bytes = require('bytes');
+```
+
+#### bytes.format(number value, [options]): string|null
+
+Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is
+ rounded.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------|--------|--------------------|
+| value | `number` | Value in bytes |
+| options | `Object` | Conversion options |
+
+**Options**
+
+| Property | Type | Description |
+|-------------------|--------|-----------------------------------------------------------------------------------------|
+| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. |
+| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` |
+| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `.`... Default value to `' '`. |
+| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|-------------|-------------------------|
+| results | `string`|`null` | Return null upon error. String value otherwise. |
+
+**Example**
+
+```js
+bytes(1024);
+// output: '1kB'
+
+bytes(1000);
+// output: '1000B'
+
+bytes(1000, {thousandsSeparator: ' '});
+// output: '1 000B'
+
+bytes(1024 * 1.7, {decimalPlaces: 0});
+// output: '2kB'
+
+bytes(1024, {unitSeparator: ' '});
+// output: '1 kB'
+
+```
+
+#### bytes.parse(string value): number|null
+
+Parse the string value into an integer in bytes. If no unit is given, it is assumed the value is in bytes.
+
+Supported units and abbreviations are as follows and are case-insensitive:
+
+ * "b" for bytes
+ * "kb" for kilobytes
+ * "mb" for megabytes
+ * "gb" for gigabytes
+ * "tb" for terabytes
+
+The units are in powers of two, not ten. This means 1kb = 1024b according to this parser.
+
+**Arguments**
+
+| Name | Type | Description |
+|---------------|--------|--------------------|
+| value | `string` | String to parse. |
+
+**Returns**
+
+| Name | Type | Description |
+|---------|-------------|-------------------------|
+| results | `number`|`null` | Return null upon error. Value in bytes otherwise. |
+
+**Example**
+
+```js
+bytes('1kB');
+// output: 1024
+
+bytes('1024');
+// output: 1024
+```
+
+## Installation
+
+```bash
+npm install bytes --save
+component install visionmedia/bytes.js
+```
+
+## License
+
+[](https://github.com/visionmedia/bytes.js/blob/master/LICENSE)
+
+[downloads-image]: https://img.shields.io/npm/dm/bytes.svg
+[downloads-url]: https://npmjs.org/package/bytes
+[npm-image]: https://img.shields.io/npm/v/bytes.svg
+[npm-url]: https://npmjs.org/package/bytes
+[travis-image]: https://img.shields.io/travis/visionmedia/bytes.js/master.svg
+[travis-url]: https://travis-ci.org/visionmedia/bytes.js
diff --git a/node_modules/bytes/index.js b/node_modules/bytes/index.js
new file mode 100644
index 0000000..aa24231
--- /dev/null
+++ b/node_modules/bytes/index.js
@@ -0,0 +1,157 @@
+/*!
+ * bytes
+ * Copyright(c) 2012-2014 TJ Holowaychuk
+ * Copyright(c) 2015 Jed Watson
+ * MIT Licensed
+ */
+
+'use strict';
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = bytes;
+module.exports.format = format;
+module.exports.parse = parse;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
+
+var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
+
+var map = {
+ b: 1,
+ kb: 1 << 10,
+ mb: 1 << 20,
+ gb: 1 << 30,
+ tb: ((1 << 30) * 1024)
+};
+
+// TODO: use is-finite module?
+var numberIsFinite = Number.isFinite || function (v) { return typeof v === 'number' && isFinite(v); };
+
+var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb)$/i;
+
+/**
+ * Convert the given value in bytes into a string or parse to string to an integer in bytes.
+ *
+ * @param {string|number} value
+ * @param {{
+ * case: [string],
+ * decimalPlaces: [number]
+ * fixedDecimals: [boolean]
+ * thousandsSeparator: [string]
+ * unitSeparator: [string]
+ * }} [options] bytes options.
+ *
+ * @returns {string|number|null}
+ */
+
+function bytes(value, options) {
+ if (typeof value === 'string') {
+ return parse(value);
+ }
+
+ if (typeof value === 'number') {
+ return format(value, options);
+ }
+
+ return null;
+}
+
+/**
+ * Format the given value in bytes into a string.
+ *
+ * If the value is negative, it is kept as such. If it is a float,
+ * it is rounded.
+ *
+ * @param {number} value
+ * @param {object} [options]
+ * @param {number} [options.decimalPlaces=2]
+ * @param {number} [options.fixedDecimals=false]
+ * @param {string} [options.thousandsSeparator=]
+ * @param {string} [options.unitSeparator=]
+ *
+ * @returns {string|null}
+ * @public
+ */
+
+function format(value, options) {
+ if (!numberIsFinite(value)) {
+ return null;
+ }
+
+ var mag = Math.abs(value);
+ var thousandsSeparator = (options && options.thousandsSeparator) || '';
+ var unitSeparator = (options && options.unitSeparator) || '';
+ var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;
+ var fixedDecimals = Boolean(options && options.fixedDecimals);
+ var unit = 'B';
+
+ if (mag >= map.tb) {
+ unit = 'TB';
+ } else if (mag >= map.gb) {
+ unit = 'GB';
+ } else if (mag >= map.mb) {
+ unit = 'MB';
+ } else if (mag >= map.kb) {
+ unit = 'kB';
+ }
+
+ var val = value / map[unit.toLowerCase()];
+ var str = val.toFixed(decimalPlaces);
+
+ if (!fixedDecimals) {
+ str = str.replace(formatDecimalsRegExp, '$1');
+ }
+
+ if (thousandsSeparator) {
+ str = str.replace(formatThousandsRegExp, thousandsSeparator);
+ }
+
+ return str + unitSeparator + unit;
+}
+
+/**
+ * Parse the string value into an integer in bytes.
+ *
+ * If no unit is given, it is assumed the value is in bytes.
+ *
+ * @param {number|string} val
+ *
+ * @returns {number|null}
+ * @public
+ */
+
+function parse(val) {
+ if (typeof val === 'number' && !isNaN(val)) {
+ return val;
+ }
+
+ if (typeof val !== 'string') {
+ return null;
+ }
+
+ // Test if the string passed is valid
+ var results = parseRegExp.exec(val);
+ var floatValue;
+ var unit = 'b';
+
+ if (!results) {
+ // Nothing could be extracted from the given string
+ floatValue = parseInt(val, 10);
+ unit = 'b'
+ } else {
+ // Retrieve the value and the unit
+ floatValue = parseFloat(results[1]);
+ unit = results[4].toLowerCase();
+ }
+
+ return Math.floor(map[unit] * floatValue);
+}
diff --git a/node_modules/bytes/package.json b/node_modules/bytes/package.json
new file mode 100644
index 0000000..4e89ad2
--- /dev/null
+++ b/node_modules/bytes/package.json
@@ -0,0 +1,120 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "bytes@2.4.0",
+ "scope": null,
+ "escapedName": "bytes",
+ "name": "bytes",
+ "rawSpec": "2.4.0",
+ "spec": "2.4.0",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser"
+ ]
+ ],
+ "_from": "bytes@2.4.0",
+ "_id": "bytes@2.4.0",
+ "_inCache": true,
+ "_location": "/bytes",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/bytes-2.4.0.tgz_1464812473023_0.6271433881483972"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "1.4.28",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "bytes@2.4.0",
+ "scope": null,
+ "escapedName": "bytes",
+ "name": "bytes",
+ "rawSpec": "2.4.0",
+ "spec": "2.4.0",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/body-parser",
+ "/raw-body"
+ ],
+ "_resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
+ "_shasum": "7d97196f9d5baf7f6935e25985549edd2a6c2339",
+ "_shrinkwrap": null,
+ "_spec": "bytes@2.4.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser",
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca",
+ "url": "http://tjholowaychuk.com"
+ },
+ "bugs": {
+ "url": "https://github.com/visionmedia/bytes.js/issues"
+ },
+ "component": {
+ "scripts": {
+ "bytes/index.js": "index.js"
+ }
+ },
+ "contributors": [
+ {
+ "name": "Jed Watson",
+ "email": "jed.watson@me.com"
+ },
+ {
+ "name": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
+ }
+ ],
+ "dependencies": {},
+ "description": "Utility to parse a string bytes to bytes and vice-versa",
+ "devDependencies": {
+ "mocha": "1.21.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7d97196f9d5baf7f6935e25985549edd2a6c2339",
+ "tarball": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz"
+ },
+ "files": [
+ "History.md",
+ "LICENSE",
+ "Readme.md",
+ "index.js"
+ ],
+ "gitHead": "2a598442bdfa796df8d01a96cc54495cda550e70",
+ "homepage": "https://github.com/visionmedia/bytes.js",
+ "keywords": [
+ "byte",
+ "bytes",
+ "utility",
+ "parse",
+ "parser",
+ "convert",
+ "converter"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ }
+ ],
+ "name": "bytes",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/visionmedia/bytes.js.git"
+ },
+ "scripts": {
+ "test": "mocha --check-leaks --reporter spec"
+ },
+ "version": "2.4.0"
+}
diff --git a/node_modules/camelcase/index.js b/node_modules/camelcase/index.js
new file mode 100644
index 0000000..b46e100
--- /dev/null
+++ b/node_modules/camelcase/index.js
@@ -0,0 +1,27 @@
+'use strict';
+module.exports = function () {
+ var str = [].map.call(arguments, function (str) {
+ return str.trim();
+ }).filter(function (str) {
+ return str.length;
+ }).join('-');
+
+ if (!str.length) {
+ return '';
+ }
+
+ if (str.length === 1 || !(/[_.\- ]+/).test(str) ) {
+ if (str[0] === str[0].toLowerCase() && str.slice(1) !== str.slice(1).toLowerCase()) {
+ return str;
+ }
+
+ return str.toLowerCase();
+ }
+
+ return str
+ .replace(/^[_.\- ]+/, '')
+ .toLowerCase()
+ .replace(/[_.\- ]+(\w|$)/g, function (m, p1) {
+ return p1.toUpperCase();
+ });
+};
diff --git a/node_modules/camelcase/license b/node_modules/camelcase/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/camelcase/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/camelcase/package.json b/node_modules/camelcase/package.json
new file mode 100644
index 0000000..00fe225
--- /dev/null
+++ b/node_modules/camelcase/package.json
@@ -0,0 +1,102 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "camelcase@^1.0.2",
+ "scope": null,
+ "escapedName": "camelcase",
+ "name": "camelcase",
+ "rawSpec": "^1.0.2",
+ "spec": ">=1.0.2 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/yargs"
+ ]
+ ],
+ "_from": "camelcase@>=1.0.2 <2.0.0",
+ "_id": "camelcase@1.2.1",
+ "_inCache": true,
+ "_location": "/camelcase",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.11.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "camelcase@^1.0.2",
+ "scope": null,
+ "escapedName": "camelcase",
+ "name": "camelcase",
+ "rawSpec": "^1.0.2",
+ "spec": ">=1.0.2 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/yargs"
+ ],
+ "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "_shasum": "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39",
+ "_shrinkwrap": null,
+ "_spec": "camelcase@^1.0.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/yargs",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/camelcase/issues"
+ },
+ "dependencies": {},
+ "description": "Convert a dash/dot/underscore/space separated string to camelCase: foo-bar → fooBar",
+ "devDependencies": {
+ "ava": "0.0.4"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "9bb5304d2e0b56698b2c758b08a3eaa9daa58a39",
+ "tarball": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "185ba12da723be9c1ee986cc2956bdc4c517a141",
+ "homepage": "https://github.com/sindresorhus/camelcase",
+ "keywords": [
+ "camelcase",
+ "camel-case",
+ "camel",
+ "case",
+ "dash",
+ "hyphen",
+ "dot",
+ "underscore",
+ "separator",
+ "string",
+ "text",
+ "convert"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "camelcase",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/camelcase.git"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "version": "1.2.1"
+}
diff --git a/node_modules/camelcase/readme.md b/node_modules/camelcase/readme.md
new file mode 100644
index 0000000..516dc39
--- /dev/null
+++ b/node_modules/camelcase/readme.md
@@ -0,0 +1,56 @@
+# camelcase [](https://travis-ci.org/sindresorhus/camelcase)
+
+> Convert a dash/dot/underscore/space separated string to camelCase: `foo-bar` → `fooBar`
+
+
+## Install
+
+```sh
+$ npm install --save camelcase
+```
+
+
+## Usage
+
+```js
+var camelCase = require('camelcase');
+
+camelCase('foo-bar');
+//=> fooBar
+
+camelCase('foo_bar');
+//=> fooBar
+
+camelCase('Foo-Bar');
+//=> fooBar
+
+camelCase('--foo.bar');
+//=> fooBar
+
+camelCase('__foo__bar__');
+//=> fooBar
+
+camelCase('foo bar');
+//=> fooBar
+
+console.log(process.argv[3]);
+//=> --foo-bar
+camelCase(process.argv[3]);
+//=> fooBar
+
+camelCase('foo', 'bar');
+//=> fooBar
+
+camelCase('__foo__', '--bar');
+//=> fooBar
+```
+
+
+## Related
+
+See [`decamelize`](https://github.com/sindresorhus/decamelize) for the inverse.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/center-align/LICENSE b/node_modules/center-align/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/center-align/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/center-align/README.md b/node_modules/center-align/README.md
new file mode 100644
index 0000000..cbcf3be
--- /dev/null
+++ b/node_modules/center-align/README.md
@@ -0,0 +1,74 @@
+# center-align [](http://badge.fury.io/js/center-align)
+
+> Center-align the text in a string.
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i center-align --save
+```
+
+## Usage
+
+```js
+var centerAlign = require('center-align');
+```
+
+**Example**
+
+If used on the following:
+
+```
+Lorem ipsum dolor sit amet,
+consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+ut labore et dolore
+magna aliqua. Ut enim ad minim
+veniam, quis
+```
+
+The result would be:
+
+```
+ Lorem ipsum dolor sit amet,
+ consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+ ut labore et dolore
+ magna aliqua. Ut enim ad minim
+ veniam, quis
+```
+
+## Related projects
+
+* [align-text](https://www.npmjs.com/package/align-text): Align the text in a string. | [homepage](https://github.com/jonschlinkert/align-text)
+* [justified](https://www.npmjs.com/package/justified): Wrap words to a specified length and justified the text. | [homepage](https://github.com/jonschlinkert/justified)
+* [right-align](https://www.npmjs.com/package/right-align): Right-align the text in a string. | [homepage](https://github.com/jonschlinkert/right-align)
+* [word-wrap](https://www.npmjs.com/package/word-wrap): Wrap words to a specified length. | [homepage](https://github.com/jonschlinkert/word-wrap)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/center-align/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 27, 2015._
\ No newline at end of file
diff --git a/node_modules/center-align/index.js b/node_modules/center-align/index.js
new file mode 100644
index 0000000..c6ed54a
--- /dev/null
+++ b/node_modules/center-align/index.js
@@ -0,0 +1,16 @@
+/*!
+ * center-align
+ *
+ * Copycenter (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var utils = require('./utils');
+
+module.exports = function centerAlign(val) {
+ return utils.align(val, function (len, longest) {
+ return Math.floor((longest - len) / 2);
+ });
+};
diff --git a/node_modules/center-align/package.json b/node_modules/center-align/package.json
new file mode 100644
index 0000000..ff4a42c
--- /dev/null
+++ b/node_modules/center-align/package.json
@@ -0,0 +1,121 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "center-align@^0.1.1",
+ "scope": null,
+ "escapedName": "center-align",
+ "name": "center-align",
+ "rawSpec": "^0.1.1",
+ "spec": ">=0.1.1 <0.2.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/cliui"
+ ]
+ ],
+ "_from": "center-align@>=0.1.1 <0.2.0",
+ "_id": "center-align@0.1.3",
+ "_inCache": true,
+ "_location": "/center-align",
+ "_nodeVersion": "5.3.0",
+ "_npmOperationalInternal": {
+ "host": "packages-9-west.internal.npmjs.com",
+ "tmp": "tmp/center-align-0.1.3.tgz_1454366538829_0.9471865000668913"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.3.12",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "center-align@^0.1.1",
+ "scope": null,
+ "escapedName": "center-align",
+ "name": "center-align",
+ "rawSpec": "^0.1.1",
+ "spec": ">=0.1.1 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cliui"
+ ],
+ "_resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "_shasum": "aa0d32629b6ee972200411cbd4461c907bc2b7ad",
+ "_shrinkwrap": null,
+ "_spec": "center-align@^0.1.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/cliui",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/center-align/issues"
+ },
+ "dependencies": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ },
+ "description": "Center-align the text in a string.",
+ "devDependencies": {
+ "mocha": "^2.2.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "aa0d32629b6ee972200411cbd4461c907bc2b7ad",
+ "tarball": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "utils.js"
+ ],
+ "gitHead": "5c5fab5012fceaa3e21a00162958c0ed11109419",
+ "homepage": "https://github.com/jonschlinkert/center-align",
+ "keywords": [
+ "align",
+ "align-center",
+ "center",
+ "center-align",
+ "right",
+ "right-align",
+ "text",
+ "typography"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ },
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ }
+ ],
+ "name": "center-align",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/center-align.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "description": "",
+ "list": [
+ "align-text",
+ "right-align",
+ "justified",
+ "word-wrap"
+ ]
+ }
+ },
+ "version": "0.1.3"
+}
diff --git a/node_modules/center-align/utils.js b/node_modules/center-align/utils.js
new file mode 100644
index 0000000..aead6d2
--- /dev/null
+++ b/node_modules/center-align/utils.js
@@ -0,0 +1,40 @@
+'use strict';
+
+/**
+ * Lazily-required module dependencies (makes the application
+ * faster)
+ */
+
+var utils = require('lazy-cache')(require);
+
+/**
+ * Temporarily re-assign `require` to trick browserify and
+ * webpack into reconizing lazy dependencies.
+ *
+ * This tiny bit of ugliness has the huge dual advantage of
+ * only loading modules that are actually called at some
+ * point in the lifecycle of the application, whilst also
+ * allowing browserify and webpack to find modules that
+ * are depended on but never actually called.
+ */
+
+var fn = require;
+require = utils;
+
+/**
+ * Lazily required module dependencies
+ */
+
+require('align-text', 'align');
+
+/**
+ * Restore `require`
+ */
+
+require = fn;
+
+/**
+ * Expose `utils` modules
+ */
+
+module.exports = utils;
diff --git a/node_modules/chalk/index.js b/node_modules/chalk/index.js
new file mode 100644
index 0000000..2d85a91
--- /dev/null
+++ b/node_modules/chalk/index.js
@@ -0,0 +1,116 @@
+'use strict';
+var escapeStringRegexp = require('escape-string-regexp');
+var ansiStyles = require('ansi-styles');
+var stripAnsi = require('strip-ansi');
+var hasAnsi = require('has-ansi');
+var supportsColor = require('supports-color');
+var defineProps = Object.defineProperties;
+var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM);
+
+function Chalk(options) {
+ // detect mode if not set manually
+ this.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled;
+}
+
+// use bright blue on Windows as the normal blue color is illegible
+if (isSimpleWindowsTerm) {
+ ansiStyles.blue.open = '\u001b[94m';
+}
+
+var styles = (function () {
+ var ret = {};
+
+ Object.keys(ansiStyles).forEach(function (key) {
+ ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
+
+ ret[key] = {
+ get: function () {
+ return build.call(this, this._styles.concat(key));
+ }
+ };
+ });
+
+ return ret;
+})();
+
+var proto = defineProps(function chalk() {}, styles);
+
+function build(_styles) {
+ var builder = function () {
+ return applyStyle.apply(builder, arguments);
+ };
+
+ builder._styles = _styles;
+ builder.enabled = this.enabled;
+ // __proto__ is used because we must return a function, but there is
+ // no way to create a function with a different prototype.
+ /* eslint-disable no-proto */
+ builder.__proto__ = proto;
+
+ return builder;
+}
+
+function applyStyle() {
+ // support varags, but simply cast to string in case there's only one arg
+ var args = arguments;
+ var argsLen = args.length;
+ var str = argsLen !== 0 && String(arguments[0]);
+
+ if (argsLen > 1) {
+ // don't slice `arguments`, it prevents v8 optimizations
+ for (var a = 1; a < argsLen; a++) {
+ str += ' ' + args[a];
+ }
+ }
+
+ if (!this.enabled || !str) {
+ return str;
+ }
+
+ var nestedStyles = this._styles;
+ var i = nestedStyles.length;
+
+ // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,
+ // see https://github.com/chalk/chalk/issues/58
+ // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.
+ var originalDim = ansiStyles.dim.open;
+ if (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) {
+ ansiStyles.dim.open = '';
+ }
+
+ while (i--) {
+ var code = ansiStyles[nestedStyles[i]];
+
+ // Replace any instances already present with a re-opening code
+ // otherwise only the part of the string until said closing code
+ // will be colored, and the rest will simply be 'plain'.
+ str = code.open + str.replace(code.closeRe, code.open) + code.close;
+ }
+
+ // Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue.
+ ansiStyles.dim.open = originalDim;
+
+ return str;
+}
+
+function init() {
+ var ret = {};
+
+ Object.keys(styles).forEach(function (name) {
+ ret[name] = {
+ get: function () {
+ return build.call(this, [name]);
+ }
+ };
+ });
+
+ return ret;
+}
+
+defineProps(Chalk.prototype, init());
+
+module.exports = new Chalk();
+module.exports.styles = ansiStyles;
+module.exports.hasColor = hasAnsi;
+module.exports.stripColor = stripAnsi;
+module.exports.supportsColor = supportsColor;
diff --git a/node_modules/chalk/license b/node_modules/chalk/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/chalk/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/chalk/package.json b/node_modules/chalk/package.json
new file mode 100644
index 0000000..488a345
--- /dev/null
+++ b/node_modules/chalk/package.json
@@ -0,0 +1,143 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "chalk@^1.0.0",
+ "scope": null,
+ "escapedName": "chalk",
+ "name": "chalk",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp"
+ ]
+ ],
+ "_from": "chalk@>=1.0.0 <2.0.0",
+ "_id": "chalk@1.1.3",
+ "_inCache": true,
+ "_location": "/chalk",
+ "_nodeVersion": "0.10.32",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/chalk-1.1.3.tgz_1459210604109_0.3892582862172276"
+ },
+ "_npmUser": {
+ "name": "qix",
+ "email": "i.am.qix@gmail.com"
+ },
+ "_npmVersion": "2.14.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "chalk@^1.0.0",
+ "scope": null,
+ "escapedName": "chalk",
+ "name": "chalk",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fancy-log",
+ "/gulp",
+ "/gulp-help",
+ "/gulp-util"
+ ],
+ "_resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "_shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98",
+ "_shrinkwrap": null,
+ "_spec": "chalk@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp",
+ "bugs": {
+ "url": "https://github.com/chalk/chalk/issues"
+ },
+ "dependencies": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "description": "Terminal string styling done right. Much color.",
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "matcha": "^0.6.0",
+ "mocha": "*",
+ "nyc": "^3.0.0",
+ "require-uncached": "^1.0.2",
+ "resolve-from": "^1.0.0",
+ "semver": "^4.3.3",
+ "xo": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "a8115c55e4a702fe4d150abd3872822a7e09fc98",
+ "tarball": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "0d8d8c204eb87a4038219131ad4d8369c9f59d24",
+ "homepage": "https://github.com/chalk/chalk#readme",
+ "keywords": [
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "str",
+ "ansi",
+ "style",
+ "styles",
+ "tty",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "qix",
+ "email": "i.am.qix@gmail.com"
+ },
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ {
+ "name": "unicorn",
+ "email": "sindresorhus+unicorn@gmail.com"
+ }
+ ],
+ "name": "chalk",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/chalk/chalk.git"
+ },
+ "scripts": {
+ "bench": "matcha benchmark.js",
+ "coverage": "nyc npm test && nyc report",
+ "coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls",
+ "test": "xo && mocha"
+ },
+ "version": "1.1.3",
+ "xo": {
+ "envs": [
+ "node",
+ "mocha"
+ ]
+ }
+}
diff --git a/node_modules/chalk/readme.md b/node_modules/chalk/readme.md
new file mode 100644
index 0000000..5cf111e
--- /dev/null
+++ b/node_modules/chalk/readme.md
@@ -0,0 +1,213 @@
+
+
+
+
+
+
+
+
+
+> Terminal string styling done right
+
+[](https://travis-ci.org/chalk/chalk)
+[](https://coveralls.io/r/chalk/chalk?branch=master)
+[](https://www.youtube.com/watch?v=9auOCbH5Ns4)
+
+
+[colors.js](https://github.com/Marak/colors.js) used to be the most popular string styling module, but it has serious deficiencies like extending `String.prototype` which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough.
+
+**Chalk is a clean and focused alternative.**
+
+
+
+
+## Why
+
+- Highly performant
+- Doesn't extend `String.prototype`
+- Expressive API
+- Ability to nest styles
+- Clean and focused
+- Auto-detects color support
+- Actively maintained
+- [Used by ~4500 modules](https://www.npmjs.com/browse/depended/chalk) as of July 15, 2015
+
+
+## Install
+
+```
+$ npm install --save chalk
+```
+
+
+## Usage
+
+Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
+
+```js
+var chalk = require('chalk');
+
+// style a string
+chalk.blue('Hello world!');
+
+// combine styled and normal strings
+chalk.blue('Hello') + 'World' + chalk.red('!');
+
+// compose multiple styles using the chainable API
+chalk.blue.bgRed.bold('Hello world!');
+
+// pass in multiple arguments
+chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz');
+
+// nest styles
+chalk.red('Hello', chalk.underline.bgBlue('world') + '!');
+
+// nest styles of the same type even (color, underline, background)
+chalk.green(
+ 'I am a green line ' +
+ chalk.blue.underline.bold('with a blue substring') +
+ ' that becomes green again!'
+);
+```
+
+Easily define your own themes.
+
+```js
+var chalk = require('chalk');
+var error = chalk.bold.red;
+console.log(error('Error!'));
+```
+
+Take advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data).
+
+```js
+var name = 'Sindre';
+console.log(chalk.green('Hello %s'), name);
+//=> Hello Sindre
+```
+
+
+## API
+
+### chalk.`',
+ // -- output --
+ '');
+ bth(
+ '',
+ // -- output --
+ '');
+ bth(
+ '',
+ // -- output --
+ '');
+ bth(
+ '',
+ // -- output --
+ '');
+ bth(
+ '',
+ // -- output --
+ '');
+
+
+ //============================================================
+ // Attribute Wrap alignment with spaces - ()
+ reset_options();
+ opts.wrap_attributes = 'force-aligned';
+ opts.indent_with_tabs = true;
+ test_fragment(
+ '',
+ // -- output --
+ '\n' +
+ '\t
\n' +
+ '\t\t
test
\n' +
+ '\t
\n' +
+ '
');
+
+
+ //============================================================
+ // Attribute Wrap de-indent - ()
+ reset_options();
+ opts.wrap_attributes = 'force-aligned';
+ opts.indent_with_tabs = false;
+ bth(
+ '',
+ // -- output --
+ '');
+
+
+ //============================================================
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force';
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force';
+ opts.wrap_line_length = 80;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force';
+ opts.wrap_attributes_indent_size = 8;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n")
+ reset_options();
+ opts.wrap_attributes = 'auto';
+ opts.wrap_line_length = 80;
+ opts.wrap_attributes_indent_size = 0;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(' ', ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'auto';
+ opts.wrap_line_length = 80;
+ opts.wrap_attributes_indent_size = 4;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(' ', ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = " ")
+ reset_options();
+ opts.wrap_attributes = 'auto';
+ opts.wrap_line_length = 0;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
');
+ test_fragment('This is some text
');
+ test_fragment(' ', ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_faligned = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-aligned';
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_faligned = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-aligned';
+ opts.wrap_line_length = 80;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_faligned = " ", indent_attr_first = " ", indent_end = "", indent_end_selfclosing = " ", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-aligned';
+ opts.wrap_attributes_indent_size = 8;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = "\n ", indent_end = "\n", indent_end_selfclosing = "\n", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-expand-multiline';
+ opts.wrap_attributes_indent_size = 4;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = "\n ", indent_end = "\n", indent_end_selfclosing = "\n", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-expand-multiline';
+ opts.wrap_attributes_indent_size = 4;
+ opts.wrap_line_length = 80;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+ // Attribute Wrap - (indent_attr = "\n ", indent_attr_first = "\n ", indent_end = "\n", indent_end_selfclosing = "\n", indent_over80 = "\n ")
+ reset_options();
+ opts.wrap_attributes = 'force-expand-multiline';
+ opts.wrap_attributes_indent_size = 8;
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment('This is some text
', 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ 'This is some text
',
+ // -- output --
+ 'This is some text
');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ '\n' +
+ ' ');
+ test_fragment(
+ ' ',
+ // -- output --
+ ' ');
+
+
+ //============================================================
+ // Handlebars Indenting Off
+ reset_options();
+ opts.indent_handlebars = false;
+ test_fragment(
+ '{{#if 0}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 0}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ '{{#each thing}}\n' +
+ ' {{name}}\n' +
+ '{{/each}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#each thing}} {{name}} {{/each}}\n' +
+ '
');
+
+
+ //============================================================
+ // Handlebars Indenting On - (content = "{{field}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment('{{#if 0}}{{field}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{field}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{field}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{field}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{field}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{field}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{field}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{field}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{field}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{field}}\n' +
+ ' {{else}}\n' +
+ ' {{field}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{field}}\n' +
+ '{{else}}\n' +
+ ' {{field}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{field}}\n' +
+ ' {{else}}\n' +
+ '{{field}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{field}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{field}}\n' +
+ ' {{else}}\n' +
+ ' {{field}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{field}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{field}}
',
+ // -- output --
+ '{{field}}
');
+ test_fragment(
+ '{{field}}
',
+ // -- output --
+ '{{field}}
');
+ test_fragment(
+ '{{field}} ',
+ // -- output --
+ '{{field}} ');
+ test_fragment('{{field}}
');
+ test_fragment('{{field}}
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{{! comment}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment('{{#if 0}}{{! comment}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{! comment}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{! comment}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{! comment}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{! comment}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{! comment}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{! comment}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{! comment}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{! comment}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{! comment}}\n' +
+ ' {{else}}\n' +
+ ' {{! comment}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{! comment}}\n' +
+ '{{else}}\n' +
+ ' {{! comment}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{! comment}}\n' +
+ ' {{else}}\n' +
+ '{{! comment}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{! comment}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{! comment}}\n' +
+ ' {{else}}\n' +
+ ' {{! comment}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{! comment}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{! comment}}
',
+ // -- output --
+ '{{! comment}}
');
+ test_fragment(
+ '{{! comment}}
',
+ // -- output --
+ '{{! comment}}
');
+ test_fragment(
+ '{{! comment}} ',
+ // -- output --
+ '{{! comment}} ');
+ test_fragment('{{! comment}}
');
+ test_fragment('{{! comment}}
');
+ test_fragment('
');
+ test_fragment('');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{{!-- comment--}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment('{{#if 0}}{{!-- comment--}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- comment--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- comment--}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- comment--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- comment--}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{!-- comment--}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{!-- comment--}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- comment--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{!-- comment--}}\n' +
+ '{{else}}\n' +
+ ' {{!-- comment--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{else}}\n' +
+ '{{!-- comment--}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{!-- comment--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- comment--}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{!-- comment--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{!-- comment--}}
',
+ // -- output --
+ '{{!-- comment--}}
');
+ test_fragment(
+ '{{!-- comment--}}
',
+ // -- output --
+ '{{!-- comment--}}
');
+ test_fragment(
+ '{{!-- comment--}} ',
+ // -- output --
+ '{{!-- comment--}} ');
+ test_fragment('{{!-- comment--}}
');
+ test_fragment('{{!-- comment--}}
');
+ test_fragment('
');
+ test_fragment('');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{pre{{field1}} {{field2}} {{field3}}post")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment('{{#if 0}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}',
+ // -- output --
+ '{{#if words}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}');
+ test_fragment(
+ '{{#if words}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}',
+ // -- output --
+ '{{#if words}}{pre{{field1}} {{field2}} {{field3}}post{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{else}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{else}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{else}}\n' +
+ '{pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{else}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {pre{{field1}} {{field2}} {{field3}}post\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{pre{{field1}} {{field2}} {{field3}}post
',
+ // -- output --
+ '{pre{{field1}} {{field2}} {{field3}}post
');
+ test_fragment(
+ '{pre{{field1}} {{field2}} {{field3}}post
',
+ // -- output --
+ '{pre{{field1}} {{field2}} {{field3}}post
');
+ test_fragment(
+ '{pre{{field1}} {{field2}} {{field3}}post ',
+ // -- output --
+ '{pre{{field1}} {{field2}} {{field3}}post ');
+ test_fragment('{pre{{field1}} {{field2}} {{field3}}post
');
+ test_fragment('{pre{{field1}} {{field2}} {{field3}}post
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{{! \n mult-line\ncomment \n with spacing\n}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{else}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{else}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{else}}\n' +
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{else}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
',
+ // -- output --
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
');
+ test_fragment(
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
',
+ // -- output --
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
');
+ test_fragment(
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}} ',
+ // -- output --
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}} ');
+ test_fragment(
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
');
+ test_fragment(
+ '{{! \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '}}
');
+ test_fragment(
+ '
');
+ test_fragment(
+ '');
+ test_fragment(
+ '
');
+ test_fragment(
+ '
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{{!-- \n mult-line\ncomment \n with spacing\n--}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{else}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}} ',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}} ');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ '--}}
');
+ test_fragment(
+ '
');
+ test_fragment(
+ '');
+ test_fragment(
+ '
');
+ test_fragment(
+ '
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}")
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}');
+ test_fragment(
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{else}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' {{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}} ',
+ // -- output --
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}} ');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
');
+ test_fragment(
+ '{{!-- \n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ '{{#> component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}
');
+ test_fragment(
+ ' component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}">
');
+ test_fragment(
+ '');
+ test_fragment(
+ ' component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}\'>
');
+ test_fragment(
+ ' component}}\n' +
+ ' mult-line\n' +
+ 'comment \n' +
+ ' with spacing\n' +
+ ' {{/ component}}--}}{{/if}}\'>
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+ // Handlebars Indenting On - (content = "content")
+ reset_options();
+ opts.indent_handlebars = true;
+ opts.wrap_line_length = 80;
+ test_fragment('{{page-title}}');
+ test_fragment('{{#if 0}}{{/if}}');
+ test_fragment('{{#if 0}}content{{/if}}');
+ test_fragment(
+ '{{#if 0}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if words}}{{/if}}',
+ // -- output --
+ '{{#if words}}{{/if}}');
+ test_fragment(
+ '{{#if words}}content{{/if}}',
+ // -- output --
+ '{{#if words}}content{{/if}}');
+ test_fragment(
+ '{{#if words}}content{{/if}}',
+ // -- output --
+ '{{#if words}}content{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ // -- output --
+ '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
');
+ test_fragment(
+ '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ 'content\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ 'content\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' content\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' content\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' content\n' +
+ ' {{else}}\n' +
+ ' content\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ ' content\n' +
+ '{{else}}\n' +
+ ' content\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ // -- output --
+ '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}');
+ test_fragment(
+ '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' content\n' +
+ ' {{else}}\n' +
+ 'content\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ 'content\n' +
+ '{{/if}}',
+ // -- output --
+ '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' content\n' +
+ ' {{else}}\n' +
+ ' content\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' content\n' +
+ '{{/if}}');
+ test_fragment(
+ '
',
+ // -- output --
+ '
');
+ test_fragment(
+ 'content
',
+ // -- output --
+ 'content
');
+ test_fragment(
+ 'content
',
+ // -- output --
+ 'content
');
+ test_fragment(
+ 'content ',
+ // -- output --
+ 'content ');
+ test_fragment('content
');
+ test_fragment('content
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('
');
+ test_fragment('{{condition < 0 ? "result1" : "result2"}} ');
+ test_fragment('{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} ');
+
+
+ //============================================================
+ // Handlebars Else tag indenting
+ reset_options();
+ opts.indent_handlebars = true;
+ test_fragment(
+ '{{#if test}}
{{else}}
{{/if}}',
+ // -- output --
+ '{{#if test}}\n' +
+ '
\n' +
+ '{{else}}\n' +
+ '
\n' +
+ '{{/if}}');
+ test_fragment('{{#if test}} {{else}} {{/if}}');
+
+
+ //============================================================
+ // Unclosed html elements
+ reset_options();
+ test_fragment(
+ '\n' +
+ '');
+ test_fragment(
+ ' \n' +
+ ' ');
+ test_fragment(
+ ' \n' +
+ ' ');
+ test_fragment(
+ ' \n' +
+ ' ');
+ test_fragment(
+ ' \n' +
+ ' ');
+ test_fragment(
+ '\n' +
+ ' \n' +
+ ' \n' +
+ ' ');
+
+
+ //============================================================
+ // Unformatted tags
+ reset_options();
+ test_fragment(
+ '\n' +
+ ' bc \n' +
+ ' ',
+ // -- output --
+ '\n' +
+ ' b\n' +
+ ' c \n' +
+ ' \n' +
+ ' ');
+ test_fragment(
+ '\n' +
+ ' bc \n' +
+ ' ');
+ test_fragment(
+ '\n' +
+ ' \n' +
+ ' \n' +
+ ' Kontakt \n' +
+ ' \n' +
+ ' ');
+ test_fragment('
');
+ test_fragment('
');
+
+
+ //============================================================
+ // File starting with comment
+ reset_options();
+ test_fragment(
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ ' a span \n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // Php formatting
+ reset_options();
+ test_fragment(
+ '',
+ // -- output --
+ '');
+ test_fragment(
+ '");\n' +
+ '}\n' +
+ '?>');
+ test_fragment(
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // Support simple language specific option inheritance/overriding - (h = " ", c = " ", j = " ")
+ reset_options();
+ opts.js = { 'indent_size': 3 };
+ opts.css = { 'indent_size': 5 };
+ test_fragment(
+ '\n' +
+ ' \n' +
+ ' \n' +
+ '');
+
+ // Support simple language specific option inheritance/overriding - (h = " ", c = " ", j = " ")
+ reset_options();
+ opts.html = { 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 } };
+ test_fragment(
+ '\n' +
+ ' \n' +
+ ' \n' +
+ '');
+
+ // Support simple language specific option inheritance/overriding - (h = " ", c = " ", j = " ")
+ reset_options();
+ opts.indent_size = 9;
+ opts.html = { 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 }, 'indent_size': 2};
+ opts.js = { 'indent_size': 5 };
+ opts.css = { 'indent_size': 3 };
+ test_fragment(
+ '\n' +
+ ' \n' +
+ ' \n' +
+ '');
+
+
+ //============================================================
+ // underscore.js formatting
+ reset_options();
+ test_fragment(
+ '\n' +
+ ' \n' +
+ '
');
+
+
+ //============================================================
+ // Indent with tabs
+ reset_options();
+ opts.indent_with_tabs = true;
+ test_fragment(
+ '\n' +
+ '
\n' +
+ '
\n' +
+ '
',
+ // -- output --
+ '\n' +
+ '\t
\n' +
+ '\t
\n' +
+ '
');
+
+
+ //============================================================
+ // Indent without tabs
+ reset_options();
+ opts.indent_with_tabs = false;
+ test_fragment(
+ '\n' +
+ '
\n' +
+ '
\n' +
+ '
',
+ // -- output --
+ '\n' +
+ '
\n' +
+ '
\n' +
+ '
');
+
+
+ //============================================================
+ // Indent body inner html by default
+ reset_options();
+ test_fragment(
+ '\n' +
+ '\n' +
+ '
\n' +
+ '\n' +
+ '\n' +
+ '',
+ // -- output --
+ '\n' +
+ '\n' +
+ '
\n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // indent_body_inner_html set to false prevents indent of body inner html
+ reset_options();
+ opts.indent_body_inner_html = false;
+ test_fragment(
+ '\n' +
+ '\n' +
+ '
\n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // Indent head inner html by default
+ reset_options();
+ test_fragment(
+ '\n' +
+ '\n' +
+ '\n' +
+ ' \n' +
+ '\n' +
+ '\n' +
+ '',
+ // -- output --
+ '\n' +
+ '\n' +
+ '\n' +
+ ' \n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // indent_head_inner_html set to false prevents indent of head inner html
+ reset_options();
+ opts.indent_head_inner_html = false;
+ test_fragment(
+ '\n' +
+ '\n' +
+ '\n' +
+ ' \n' +
+ '\n' +
+ '\n' +
+ '');
+
+
+ //============================================================
+ // content_unformatted to prevent formatting content
+ reset_options();
+ opts.content_unformatted = ['script', 'style', 'p', 'span', 'br'];
+ test_fragment(
+ 'A ',
+ // -- output --
+ '\n' +
+ '\n' +
+ ' A \n' +
+ ' \n' +
+ ' \n' +
+ '\n' +
+ '\n' +
+ '');
+ test_fragment(
+ '
But not me
',
+ // -- output --
+ '\n' +
+ '
Beautify me
\n' +
+ '
\n' +
+ '
But not me
');
+ test_fragment(
+ '
But not me
',
+ // -- output --
+ '\n' +
+ '
Beautify me
\n' +
+ '
\n' +
+ '
But not me
');
+ test_fragment('');
+ test_fragment('
');
+ test_fragment(
+ 'var a=1;\n' +
+ 'var b=a; ',
+ // -- output --
+ '\n' +
+ '
var a=1; var b=a; \n' +
+ '
');
+ test_fragment(
+ '\n' +
+ 'var a=1;\n' +
+ 'var b=a;\n' +
+ ' ',
+ // -- output --
+ '\n' +
+ '
\n' +
+ ' var a=1; var b=a;\n' +
+ ' \n' +
+ '
');
+
+
+ //============================================================
+ // default content_unformatted
+ reset_options();
+ test_fragment(
+ 'A ',
+ // -- output --
+ '\n' +
+ '\n' +
+ ' A \n' +
+ ' \n' +
+ ' \n' +
+ '\n' +
+ '\n' +
+ '');
+ test_fragment(
+ '
But not me
',
+ // -- output --
+ '\n' +
+ '
Beautify me
\n' +
+ '
\n' +
+ '\n' +
+ '
But not me
\n' +
+ '');
+ test_fragment(
+ '
But not me
',
+ // -- output --
+ '\n' +
+ '
Beautify me
\n' +
+ '
\n' +
+ '\n' +
+ '
But not me
\n' +
+ '');
+ test_fragment('');
+ test_fragment('
');
+ test_fragment(
+ 'var a=1;\n' +
+ 'var b=a; ',
+ // -- output --
+ '\n' +
+ '
var a=1;\n' +
+ 'var b=a; \n' +
+ '
');
+ test_fragment(
+ '\n' +
+ 'var a=1;\n' +
+ 'var b=a;\n' +
+ ' ',
+ // -- output --
+ '\n' +
+ '
\n' +
+ 'var a=1;\n' +
+ 'var b=a;\n' +
+ ' \n' +
+ '
');
+
+
+ //============================================================
+ // New Test Suite
+ reset_options();
+
+
+ }
+
+ function beautifier_unconverted_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ opts.end_with_newline = true;
+ test_fragment('', '\n');
+ test_fragment('
\n');
+ test_fragment('
\n\n\n', '
\n');
+ test_fragment('\n' +
+ ' \n' +
+ '\n');
+
+
+ opts.end_with_newline = false;
+ // error cases need love too
+ bth(' ');
+ bth("
+
+ test_fragment(
+ '\n' +
+ ' \n' +
+ '');
+
+ test_fragment('
\n', '
');
+ bth('
');
+ bth('content
');
+ bth('',
+ '');
+ bth('',
+ '\n' +
+ '
content
\n' +
+ '
');
+ bth('\n' +
+ ' content \n' +
+ '
');
+ bth('\n' +
+ '
');
+ bth('\n' +
+ ' content\n' +
+ '
');
+ bth('\n' +
+ '
',
+ '\n' +
+ '
');
+ bth(' \n' +
+ '
',
+ '\n' +
+ '
');
+ bth('\n' +
+ '
\n' +
+ ' \n' +
+ '
',
+ '\n' +
+ '
\n' +
+ '\n' +
+ '
');
+ bth(' \n' +
+ '
',
+ '\n' +
+ '
');
+ bth('content
',
+ 'content
');
+ bth('
',
+ '
');
+ bth('content\n' +
+ ' \n' +
+ '
\n' +
+ 'content',
+ 'content\n' +
+ '\n' +
+ '
\n' +
+ 'content');
+ bth('\n' +
+ ' \n' +
+ '
\n' +
+ ' ');
+ bth('\n' +
+ '\n' +
+ '
\n' +
+ ' ',
+ '\n' +
+ ' \n' +
+ '
\n' +
+ ' ');
+ bth('\n' +
+ ' content\n' +
+ ' \n' +
+ '\n' +
+ ' content\n' +
+ ' ');
+
+ bth(' content');
+ bth(' content');
+ bth(' content', ' content');
+
+ bth(' content');
+ bth(' content');
+ bth(' content', ' content');
+
+ bth('content ');
+ bth(' content ');
+ bth(' content ', ' content ');
+
+ bth('content
content
');
+ bth(' content
content
');
+ bth(' content
content
',
+ ' content
content
');
+ bth('Text Link Text');
+
+ var unformatted = opts.unformatted;
+ opts.unformatted = ['script', 'style'];
+ bth('');
+ bth('');
+ opts.unformatted = unformatted;
+
+ unformatted = opts.unformatted;
+ opts.unformatted = ['custom-element'];
+ test_fragment('should not ' +
+ ' insert newlines
',
+ 'should not ' +
+ ' insert newlines
');
+ opts.unformatted = unformatted;
+
+ // Tests that don't pass, but probably should.
+ // bth('content
');
+
+ // Handlebars tests
+ // Without the indent option on, handlebars are treated as content.
+
+ opts.wrap_line_length = 0;
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all.
');
+
+ // A value of 0 means no max line length, and should not wrap.
+ //...---------1---------2---------3---------4---------5---------6---------7---------8---------9--------10--------11--------12--------13--------14--------15--------16--------17--------18--------19--------20--------21--------22--------23--------24--------25--------26--------27--------28--------29
+ //...12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
');
+
+ opts.wrap_line_length = "0";
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all.
');
+
+ // A value of "0" means no max line length, and should not wrap
+ //...---------1---------2---------3---------4---------5---------6---------7---------8---------9--------10--------11--------12--------13--------14--------15--------16--------17--------18--------19--------20--------21--------22--------23--------24--------25--------26--------27--------28--------29
+ //...12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
');
+
+ //BUGBUG: This should wrap before 40 not after.
+ opts.wrap_line_length = 40;
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some test text that should wrap_inside_this section here.
',
+ /* expected */
+ 'Some test text that should wrap_inside_this\n' +
+ ' section here.
');
+
+ opts.wrap_line_length = "40";
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some test text that should wrap_inside_this section here.
',
+ /* expected */
+ 'Some test text that should wrap_inside_this\n' +
+ ' section here.
');
+
+ opts.indent_size = 1;
+ opts.indent_char = '\t';
+ opts.preserve_newlines = false;
+ bth('\n\tfoo\n
', ' foo
');
+
+ opts.preserve_newlines = true;
+ bth('\n\tfoo\n
');
+
+
+
+ // test preserve_newlines and max_preserve_newlines
+ opts.preserve_newlines = false;
+ bth('Should not
\n\n\n' +
+ 'preserve newlines
',
+ 'Should not
\n' +
+ 'preserve newlines
');
+
+ opts.preserve_newlines = true;
+ opts.max_preserve_newlines = 0;
+ bth('Should
\n\n\n' +
+ 'preserve zero newlines
',
+ 'Should
\n' +
+ 'preserve zero newlines
');
+
+ opts.max_preserve_newlines = 1;
+ bth('Should
\n\n\n' +
+ 'preserve one newline
',
+ 'Should
\n\n' +
+ 'preserve one newline
');
+
+ opts.max_preserve_newlines = null;
+ bth('Should
\n\n\n' +
+ 'preserve one newline
',
+ 'Should
\n\n\n' +
+ 'preserve one newline
');
+ }
+
+ beautifier_tests();
+ beautifier_unconverted_tests();
+}
+
+if (typeof exports !== "undefined") {
+ exports.run_html_tests = run_html_tests;
+}
diff --git a/node_modules/js-beautify/js/test/generated/beautify-javascript-tests.js b/node_modules/js-beautify/js/test/generated/beautify-javascript-tests.js
new file mode 100644
index 0000000..dc1d18a
--- /dev/null
+++ b/node_modules/js-beautify/js/test/generated/beautify-javascript-tests.js
@@ -0,0 +1,5825 @@
+/*
+ AUTO-GENERATED. DO NOT MODIFY.
+ Script: test/generate-tests.js
+ Template: test/data/javascript/node.mustache
+ Data: test/data/javascript/tests.js
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+/*jshint unused:false */
+
+function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_beautify)
+{
+
+ var default_opts = {
+ indent_size: 4,
+ indent_char: ' ',
+ preserve_newlines: true,
+ jslint_happy: false,
+ keep_array_indentation: false,
+ brace_style: 'collapse',
+ space_before_conditional: true,
+ break_chained_methods: false,
+ selector_separator: '\n',
+ end_with_newline: false
+ };
+ var opts;
+
+ default_opts.indent_size = 4;
+ default_opts.indent_char = ' ';
+ default_opts.preserve_newlines = true;
+ default_opts.jslint_happy = false;
+ default_opts.keep_array_indentation = false;
+ default_opts.brace_style = 'collapse';
+ default_opts.operator_position = 'before-newline';
+
+ function reset_options()
+ {
+ opts = JSON.parse(JSON.stringify(default_opts));
+ }
+
+ function test_js_beautifier(input)
+ {
+ return js_beautify(input, opts);
+ }
+
+ var sanitytest;
+
+ // test the input on beautifier with the current flag settings
+ // does not check the indentation / surroundings as bt() does
+ function test_fragment(input, expected)
+ {
+ expected = expected || expected === '' ? expected : input;
+ sanitytest.expect(input, expected);
+ // if the expected is different from input, run it again
+ // expected output should be unchanged when run twice.
+ if (expected !== input) {
+ sanitytest.expect(expected, expected);
+ }
+
+ // Everywhere we do newlines, they should be replaced with opts.eol
+ opts.eol = '\r\\n';
+ expected = expected.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ if (input.indexOf('\n') !== -1) {
+ input = input.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ // Ensure support for auto eol detection
+ opts.eol = 'auto';
+ sanitytest.expect(input, expected);
+ }
+ opts.eol = '\n';
+ }
+
+
+
+ // test the input on beautifier with the current flag settings
+ // test both the input as well as { input } wrapping
+ function bt(input, expectation)
+ {
+ var wrapped_input, wrapped_expectation;
+
+ expectation = expectation || expectation === '' ? expectation : input;
+ sanitytest.test_function(test_js_beautifier, 'js_beautify');
+ test_fragment(input, expectation);
+
+ // If we set raw, input should be unchanged
+ opts.test_output_raw = true;
+ if (!opts.end_with_newline) {
+ test_fragment(input, input);
+ }
+ opts.test_output_raw = false;
+
+ // test also the returned indentation
+ // e.g if input = "asdf();"
+ // then test that this remains properly formatted as well:
+ // {
+ // asdf();
+ // indent;
+ // }
+
+ var current_indent_size = opts.js ? opts.js.indent_size : null;
+ current_indent_size = current_indent_size ? current_indent_size : opts.indent_size;
+ if (current_indent_size === 4 && input) {
+ wrapped_input = '{\n' + input.replace(/^(.+)$/mg, ' $1') + '\n foo = bar;\n}';
+ wrapped_expectation = '{\n' + expectation.replace(/^(.+)$/mg, ' $1') + '\n foo = bar;\n}';
+ test_fragment(wrapped_input, wrapped_expectation);
+
+ // If we set raw, input should be unchanged
+ opts.test_output_raw = true;
+ if (!opts.end_with_newline) {
+ test_fragment(wrapped_input, wrapped_input);
+ }
+ opts.test_output_raw = false;
+ }
+
+ }
+
+ // run all tests for the given brace style ("collapse", "expand", "end-expand", or "none").
+ // uses various whitespace combinations before and after opening and closing braces,
+ // respectively, for most of the tests' inputs.
+ function beautify_brace_tests(brace_style) {
+
+ var indent_on_wrap_str = ' '; // could use Array(opts.indent_size + 1).join(' '); if we wanted to replace _all_ of the hardcoded 4-space in the test and expectation strings
+
+ function permute_brace_tests(expect_open_white, expect_close_white) {
+
+ // run the tests that need permutation against a specific combination of
+ // pre-opening-brace and pre-closing-brace whitespace
+ function run_brace_permutation(test_open_white, test_close_white) {
+ var to = test_open_white,
+ tc = test_close_white,
+ eo = expect_open_white ? expect_open_white : to === '' ? ' ' : to,
+ ec = expect_close_white ? expect_close_white : tc === '' ? ' ' : tc,
+ i = eo === '\n' ? indent_on_wrap_str: '';
+
+ bt( '//case 1\nif (a == 1)' + to + '{}\n//case 2\nelse if (a == 2)' + to + '{}',
+ '//case 1\nif (a == 1)' + eo + '{}\n//case 2\nelse if (a == 2)' + eo + '{}');
+ bt( 'if(1)' + to + '{2}' + tc + 'else' + to + '{3}',
+ 'if (1)' + eo + '{\n 2\n}' + ec + 'else' + eo + '{\n 3\n}');
+ bt( 'try' + to + '{a();}' + tc +
+ 'catch(b)' + to + '{c();}' + tc +
+ 'catch(d)' + to + '{}' + tc +
+ 'finally' + to + '{e();}',
+ // expected
+ 'try' + eo + '{\n a();\n}' + ec +
+ 'catch (b)' + eo + '{\n c();\n}' + ec +
+ 'catch (d)' + eo + '{}' + ec +
+ 'finally' + eo + '{\n e();\n}');
+ bt( 'if(a)' + to + '{b();}' + tc + 'else if(c) foo();',
+ 'if (a)' + eo + '{\n b();\n}' + ec + 'else if (c) foo();');
+ // if/else statement with empty body
+ bt( 'if (a)' + to + '{\n// comment\n}' + tc + 'else' + to + '{\n// comment\n}',
+ 'if (a)' + eo + '{\n // comment\n}' + ec + 'else' + eo + '{\n // comment\n}');
+ bt( 'if (x)' + to + '{y}' + tc + 'else' + to + '{ if (x)' + to + '{y}}',
+ 'if (x)' + eo + '{\n y\n}' + ec + 'else' + eo + '{\n if (x)' + eo + i + '{\n y\n }\n}');
+ bt( 'if (a)' + to + '{\nb;\n}' + tc + 'else' + to + '{\nc;\n}',
+ 'if (a)' + eo + '{\n b;\n}' + ec + 'else' + eo + '{\n c;\n}');
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo)' + to + '{\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo)' + eo + i + '{\n bar();\n }');
+ bt( 'if (foo)' + to + '{}' + tc + 'else /regex/.test();',
+ 'if (foo)' + eo + '{}' + ec + 'else /regex/.test();');
+ test_fragment('if (foo)' + to + '{', 'if (foo)' + eo + '{');
+ test_fragment('foo' + to + '{', 'foo' + eo + '{');
+ test_fragment('return;' + to + '{', 'return;' + eo + '{');
+ bt( 'function x()' + to + '{\n foo();\n}zzz', 'function x()' + eo +'{\n foo();\n}\nzzz');
+ bt( 'var a = new function a()' + to + '{};', 'var a = new function a()' + eo + '{};');
+ bt( 'var a = new function a()' + to + ' {},\n b = new function b()' + to + ' {};',
+ 'var a = new function a()' + eo + i + '{},\n b = new function b()' + eo + i + '{};');
+ bt("foo(" + to + "{\n 'a': 1\n},\n10);",
+ "foo(" + (eo === ' ' ? '' : eo) + i + "{\n 'a': 1\n },\n 10);"); // "foo( {..." is a weird case
+ bt('(["foo","bar"]).each(function(i)' + to + '{return i;});',
+ '(["foo", "bar"]).each(function(i)' + eo + '{\n return i;\n});');
+ bt('(function(i)' + to + '{return i;})();', '(function(i)' + eo + '{\n return i;\n})();');
+
+ bt( "test( /*Argument 1*/" + to + "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test( /*Argument 1*/" + eo + i + "{\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+
+ bt( "test( /*Argument 1*/" + to + "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test( /*Argument 1*/" + eo + i + "{\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+ }
+
+ run_brace_permutation('\n', '\n');
+ run_brace_permutation('\n', ' ');
+ run_brace_permutation(' ', ' ');
+ run_brace_permutation(' ', '\n');
+ run_brace_permutation('','');
+
+ // brace tests that don't make sense to permutate
+ test_fragment('return {'); // return needs the brace.
+ test_fragment('return /* inline */ {');
+ bt('throw {}');
+ bt('throw {\n foo;\n}');
+ bt( 'var foo = {}');
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx');
+ bt( '{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}');
+ bt( 'var a = new function() {};');
+ bt( 'var a = new function()\n{};', 'var a = new function() {};');
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+ }
+
+ reset_options();
+ opts.brace_style = brace_style;
+
+ switch(opts.brace_style) {
+ case 'collapse':
+ permute_brace_tests(' ', ' ');
+ break;
+ case 'expand':
+ permute_brace_tests('\n', '\n');
+ break;
+ case 'end-expand':
+ permute_brace_tests(' ', '\n');
+ break;
+ case 'none':
+ permute_brace_tests();
+ break;
+ }
+ }
+
+ function unicode_char(value) {
+ return String.fromCharCode(value);
+ }
+
+ function beautifier_tests()
+ {
+ sanitytest = test_obj;
+
+
+ //============================================================
+ // Unicode Support
+ reset_options();
+ bt('var ' + unicode_char(3232) + '_' + unicode_char(3232) + ' = "hi";');
+ bt(
+ 'var ' + unicode_char(228) + 'x = {\n' +
+ ' ' + unicode_char(228) + 'rgerlich: true\n' +
+ '};');
+
+
+ //============================================================
+ // Test template and continuation strings
+ reset_options();
+ bt('`This is a ${template} string.`');
+ bt(
+ '`This\n' +
+ ' is\n' +
+ ' a\n' +
+ ' ${template}\n' +
+ ' string.`');
+ bt(
+ 'a = `This is a continuation\\\n' +
+ 'string.`');
+ bt(
+ 'a = "This is a continuation\\\n' +
+ 'string."');
+ bt(
+ '`SELECT\n' +
+ ' nextval(\'${this.options.schema ? `${this.options.schema}.` : \'\'}"${this.tableName}_${this.autoIncrementField}_seq"\'::regclass\n' +
+ ' ) nextval;`');
+
+ // Tests for #1030
+ bt(
+ 'const composeUrl = (host) => {\n' +
+ ' return `${host `test`}`;\n' +
+ '};');
+ bt(
+ 'const composeUrl = (host, api, key, data) => {\n' +
+ ' switch (api) {\n' +
+ ' case "Init":\n' +
+ ' return `${host}/vwapi/Init?VWID=${key}&DATA=${encodeURIComponent(\n' +
+ ' Object.keys(data).map((k) => `${k}=${ data[k]}` ).join(";")\n' +
+ ' )}`;\n' +
+ ' case "Pay":\n' +
+ ' return `${host}/vwapi/Pay?SessionId=${par}`;\n' +
+ ' };\n' +
+ '};');
+
+
+ //============================================================
+ // ES7 Decorators
+ reset_options();
+ bt('@foo');
+ bt('@foo(bar)');
+ bt(
+ '@foo(function(k, v) {\n' +
+ ' implementation();\n' +
+ '})');
+
+
+ //============================================================
+ // ES7 exponential
+ reset_options();
+ bt('x ** 2');
+ bt('x ** -2');
+
+
+ //============================================================
+ // Spread operator
+ reset_options();
+ opts.brace_style = "collapse,preserve-inline";
+ bt('const m = { ...item, c: 3 };');
+ bt(
+ 'const m = {\n' +
+ ' ...item,\n' +
+ ' c: 3\n' +
+ '};');
+ bt('const m = { c: 3, ...item };');
+ bt('const m = [...item, 3];');
+ bt('const m = [3, ...item];');
+
+
+ //============================================================
+ // Object literal shorthand functions
+ reset_options();
+ bt(
+ 'return {\n' +
+ ' foo() {\n' +
+ ' return 42;\n' +
+ ' }\n' +
+ '}');
+ bt(
+ 'var foo = {\n' +
+ ' * bar() {\n' +
+ ' yield 42;\n' +
+ ' }\n' +
+ '};');
+ bt(
+ 'var foo = {bar(){return 42;},*barGen(){yield 42;}};',
+ // -- output --
+ 'var foo = {\n' +
+ ' bar() {\n' +
+ ' return 42;\n' +
+ ' },\n' +
+ ' * barGen() {\n' +
+ ' yield 42;\n' +
+ ' }\n' +
+ '};');
+
+ // also handle generator shorthand in class - #1013
+ bt(
+ 'class A {\n' +
+ ' fn() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ '\n' +
+ ' * gen() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ '}');
+ bt(
+ 'class A {\n' +
+ ' * gen() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ '\n' +
+ ' fn() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ '}');
+
+
+ //============================================================
+ // End With Newline - (eof = "\n")
+ reset_options();
+ opts.end_with_newline = true;
+ test_fragment('', '\n');
+ test_fragment(' return .5', ' return .5\n');
+ test_fragment(
+ ' \n' +
+ '\n' +
+ 'return .5\n' +
+ '\n' +
+ '\n' +
+ '\n',
+ // -- output --
+ ' return .5\n');
+ test_fragment('\n');
+
+ // End With Newline - (eof = "")
+ reset_options();
+ opts.end_with_newline = false;
+ test_fragment('');
+ test_fragment(' return .5');
+ test_fragment(
+ ' \n' +
+ '\n' +
+ 'return .5\n' +
+ '\n' +
+ '\n' +
+ '\n',
+ // -- output --
+ ' return .5');
+ test_fragment('\n', '');
+
+
+ //============================================================
+ // Support simple language specific option inheritance/overriding - (j = " ")
+ reset_options();
+ opts.js = { 'indent_size': 3 };
+ opts.css = { 'indent_size': 5 };
+ bt(
+ 'if (a == b) {\n' +
+ ' test();\n' +
+ '}');
+
+ // Support simple language specific option inheritance/overriding - (j = " ")
+ reset_options();
+ opts.html = { 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 } };
+ bt(
+ 'if (a == b) {\n' +
+ ' test();\n' +
+ '}');
+
+ // Support simple language specific option inheritance/overriding - (j = " ")
+ reset_options();
+ opts.indent_size = 9;
+ opts.html = { 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 }, 'indent_size': 2};
+ opts.js = { 'indent_size': 4 };
+ opts.css = { 'indent_size': 3 };
+ bt(
+ 'if (a == b) {\n' +
+ ' test();\n' +
+ '}');
+
+
+ //============================================================
+ // Brace style permutations - (ibo = "", iao = "", ibc = "", iac = "", obo = " ", oao = " ", obc = " ", oac = " ")
+ reset_options();
+ opts.brace_style = 'collapse,preserve-inline';
+ bt(
+ 'var a ={a: 2};\n' +
+ 'var a ={a: 2};',
+ // -- output --
+ 'var a = { a: 2 };\n' +
+ 'var a = { a: 2 };');
+ bt(
+ '//case 1\n' +
+ 'if (a == 1){}\n' +
+ '//case 2\n' +
+ 'else if (a == 2){}',
+ // -- output --
+ '//case 1\n' +
+ 'if (a == 1) {}\n' +
+ '//case 2\n' +
+ 'else if (a == 2) {}');
+ bt('if(1){2}else{3}', 'if (1) { 2 } else { 3 }');
+ bt('try{a();}catch(b){c();}catch(d){}finally{e();}', 'try { a(); } catch (b) { c(); } catch (d) {} finally { e(); }');
+
+ // Brace style permutations - (ibo = "\n", iao = "\n", ibc = "\n", iac = "\n", obo = " ", oao = "\n ", obc = "\n", oac = " ")
+ reset_options();
+ opts.brace_style = 'collapse,preserve-inline';
+ bt(
+ 'var a =\n' +
+ '{\n' +
+ 'a: 2\n' +
+ '}\n' +
+ ';\n' +
+ 'var a =\n' +
+ '{\n' +
+ 'a: 2\n' +
+ '}\n' +
+ ';',
+ // -- output --
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};\n' +
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};');
+ bt(
+ '//case 1\n' +
+ 'if (a == 1)\n' +
+ '{}\n' +
+ '//case 2\n' +
+ 'else if (a == 2)\n' +
+ '{}',
+ // -- output --
+ '//case 1\n' +
+ 'if (a == 1) {}\n' +
+ '//case 2\n' +
+ 'else if (a == 2) {}');
+ bt(
+ 'if(1)\n' +
+ '{\n' +
+ '2\n' +
+ '}\n' +
+ 'else\n' +
+ '{\n' +
+ '3\n' +
+ '}',
+ // -- output --
+ 'if (1) {\n' +
+ ' 2\n' +
+ '} else {\n' +
+ ' 3\n' +
+ '}');
+ bt(
+ 'try\n' +
+ '{\n' +
+ 'a();\n' +
+ '}\n' +
+ 'catch(b)\n' +
+ '{\n' +
+ 'c();\n' +
+ '}\n' +
+ 'catch(d)\n' +
+ '{}\n' +
+ 'finally\n' +
+ '{\n' +
+ 'e();\n' +
+ '}',
+ // -- output --
+ 'try {\n' +
+ ' a();\n' +
+ '} catch (b) {\n' +
+ ' c();\n' +
+ '} catch (d) {} finally {\n' +
+ ' e();\n' +
+ '}');
+
+ // Brace style permutations - (ibo = "", iao = "", ibc = "", iac = "", obo = " ", oao = "\n ", obc = "\n", oac = " ")
+ reset_options();
+ opts.brace_style = 'collapse';
+ bt(
+ 'var a ={a: 2};\n' +
+ 'var a ={a: 2};',
+ // -- output --
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};\n' +
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};');
+ bt(
+ '//case 1\n' +
+ 'if (a == 1){}\n' +
+ '//case 2\n' +
+ 'else if (a == 2){}',
+ // -- output --
+ '//case 1\n' +
+ 'if (a == 1) {}\n' +
+ '//case 2\n' +
+ 'else if (a == 2) {}');
+ bt(
+ 'if(1){2}else{3}',
+ // -- output --
+ 'if (1) {\n' +
+ ' 2\n' +
+ '} else {\n' +
+ ' 3\n' +
+ '}');
+ bt(
+ 'try{a();}catch(b){c();}catch(d){}finally{e();}',
+ // -- output --
+ 'try {\n' +
+ ' a();\n' +
+ '} catch (b) {\n' +
+ ' c();\n' +
+ '} catch (d) {} finally {\n' +
+ ' e();\n' +
+ '}');
+
+ // Brace style permutations - (ibo = "\n", iao = "\n", ibc = "\n", iac = "\n", obo = " ", oao = "\n ", obc = "\n", oac = " ")
+ reset_options();
+ opts.brace_style = 'collapse';
+ bt(
+ 'var a =\n' +
+ '{\n' +
+ 'a: 2\n' +
+ '}\n' +
+ ';\n' +
+ 'var a =\n' +
+ '{\n' +
+ 'a: 2\n' +
+ '}\n' +
+ ';',
+ // -- output --
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};\n' +
+ 'var a = {\n' +
+ ' a: 2\n' +
+ '};');
+ bt(
+ '//case 1\n' +
+ 'if (a == 1)\n' +
+ '{}\n' +
+ '//case 2\n' +
+ 'else if (a == 2)\n' +
+ '{}',
+ // -- output --
+ '//case 1\n' +
+ 'if (a == 1) {}\n' +
+ '//case 2\n' +
+ 'else if (a == 2) {}');
+ bt(
+ 'if(1)\n' +
+ '{\n' +
+ '2\n' +
+ '}\n' +
+ 'else\n' +
+ '{\n' +
+ '3\n' +
+ '}',
+ // -- output --
+ 'if (1) {\n' +
+ ' 2\n' +
+ '} else {\n' +
+ ' 3\n' +
+ '}');
+ bt(
+ 'try\n' +
+ '{\n' +
+ 'a();\n' +
+ '}\n' +
+ 'catch(b)\n' +
+ '{\n' +
+ 'c();\n' +
+ '}\n' +
+ 'catch(d)\n' +
+ '{}\n' +
+ 'finally\n' +
+ '{\n' +
+ 'e();\n' +
+ '}',
+ // -- output --
+ 'try {\n' +
+ ' a();\n' +
+ '} catch (b) {\n' +
+ ' c();\n' +
+ '} catch (d) {} finally {\n' +
+ ' e();\n' +
+ '}');
+
+
+ //============================================================
+ // Comma-first option - (c0 = ",\n", c1 = ",\n ", c2 = ",\n ", c3 = ",\n ", f1 = " ,\n ")
+ reset_options();
+ opts.comma_first = false;
+ bt(
+ '{a:1, b:2}',
+ // -- output --
+ '{\n' +
+ ' a: 1,\n' +
+ ' b: 2\n' +
+ '}');
+ bt(
+ 'var a=1, b=c[d], e=6;',
+ // -- output --
+ 'var a = 1,\n' +
+ ' b = c[d],\n' +
+ ' e = 6;');
+ bt(
+ 'for(var a=1,b=2,c=3;d<3;d++)\n' +
+ 'e',
+ // -- output --
+ 'for (var a = 1, b = 2, c = 3; d < 3; d++)\n' +
+ ' e');
+ bt(
+ 'for(var a=1,b=2,\n' +
+ 'c=3;d<3;d++)\n' +
+ 'e',
+ // -- output --
+ 'for (var a = 1, b = 2,\n' +
+ ' c = 3; d < 3; d++)\n' +
+ ' e');
+ bt(
+ 'function foo() {\n' +
+ ' return [\n' +
+ ' "one",\n' +
+ ' "two"\n' +
+ ' ];\n' +
+ '}');
+ bt(
+ 'a=[[1,2],[4,5],[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],[7,8],]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' [7, 8],\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt('a=[b,c,function(){},function(){},d]', 'a = [b, c, function() {}, function() {}, d]');
+ bt(
+ 'a=[b,c,\n' +
+ 'function(){},function(){},d]',
+ // -- output --
+ 'a = [b, c,\n' +
+ ' function() {},\n' +
+ ' function() {},\n' +
+ ' d\n' +
+ ']');
+ bt('a=[a[1],b[4],c[d[7]]]', 'a = [a[1], b[4], c[d[7]]]');
+ bt('[1,2,[3,4,[5,6],7],8]', '[1, 2, [3, 4, [5, 6], 7], 8]');
+ bt(
+ '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+ // -- output --
+ '[\n' +
+ ' [\n' +
+ ' ["1", "2"],\n' +
+ ' ["3", "4"]\n' +
+ ' ],\n' +
+ ' [\n' +
+ ' ["5", "6", "7"],\n' +
+ ' ["8", "9", "0"]\n' +
+ ' ],\n' +
+ ' [\n' +
+ ' ["1", "2", "3"],\n' +
+ ' ["4", "5", "6", "7"],\n' +
+ ' ["8", "9", "0"]\n' +
+ ' ]\n' +
+ ']');
+ bt(
+ 'changeCollection.add({\n' +
+ ' name: "Jonathan" // New line inserted after this line on every save\n' +
+ ' , age: 25\n' +
+ '});',
+ // -- output --
+ 'changeCollection.add({\n' +
+ ' name: "Jonathan" // New line inserted after this line on every save\n' +
+ ' ,\n' +
+ ' age: 25\n' +
+ '});');
+ bt(
+ 'changeCollection.add(\n' +
+ ' function() {\n' +
+ ' return true;\n' +
+ ' },\n' +
+ ' function() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ ');');
+
+ // Comma-first option - (c0 = "\n, ", c1 = "\n , ", c2 = "\n , ", c3 = "\n , ", f1 = ", ")
+ reset_options();
+ opts.comma_first = true;
+ bt(
+ '{a:1, b:2}',
+ // -- output --
+ '{\n' +
+ ' a: 1\n' +
+ ' , b: 2\n' +
+ '}');
+ bt(
+ 'var a=1, b=c[d], e=6;',
+ // -- output --
+ 'var a = 1\n' +
+ ' , b = c[d]\n' +
+ ' , e = 6;');
+ bt(
+ 'for(var a=1,b=2,c=3;d<3;d++)\n' +
+ 'e',
+ // -- output --
+ 'for (var a = 1, b = 2, c = 3; d < 3; d++)\n' +
+ ' e');
+ bt(
+ 'for(var a=1,b=2,\n' +
+ 'c=3;d<3;d++)\n' +
+ 'e',
+ // -- output --
+ 'for (var a = 1, b = 2\n' +
+ ' , c = 3; d < 3; d++)\n' +
+ ' e');
+ bt(
+ 'function foo() {\n' +
+ ' return [\n' +
+ ' "one"\n' +
+ ' , "two"\n' +
+ ' ];\n' +
+ '}');
+ bt(
+ 'a=[[1,2],[4,5],[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2]\n' +
+ ' , [4, 5]\n' +
+ ' , [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],[7,8],]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2]\n' +
+ ' , [4, 5]\n' +
+ ' , [7, 8]\n' +
+ ', ]');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2]\n' +
+ ' , [4, 5]\n' +
+ ' , function() {}\n' +
+ ' , [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2]\n' +
+ ' , [4, 5]\n' +
+ ' , function() {}\n' +
+ ' , function() {}\n' +
+ ' , [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2]\n' +
+ ' , [4, 5]\n' +
+ ' , function() {}\n' +
+ ' , [7, 8]\n' +
+ ']');
+ bt('a=[b,c,function(){},function(){},d]', 'a = [b, c, function() {}, function() {}, d]');
+ bt(
+ 'a=[b,c,\n' +
+ 'function(){},function(){},d]',
+ // -- output --
+ 'a = [b, c\n' +
+ ' , function() {}\n' +
+ ' , function() {}\n' +
+ ' , d\n' +
+ ']');
+ bt('a=[a[1],b[4],c[d[7]]]', 'a = [a[1], b[4], c[d[7]]]');
+ bt('[1,2,[3,4,[5,6],7],8]', '[1, 2, [3, 4, [5, 6], 7], 8]');
+ bt(
+ '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+ // -- output --
+ '[\n' +
+ ' [\n' +
+ ' ["1", "2"]\n' +
+ ' , ["3", "4"]\n' +
+ ' ]\n' +
+ ' , [\n' +
+ ' ["5", "6", "7"]\n' +
+ ' , ["8", "9", "0"]\n' +
+ ' ]\n' +
+ ' , [\n' +
+ ' ["1", "2", "3"]\n' +
+ ' , ["4", "5", "6", "7"]\n' +
+ ' , ["8", "9", "0"]\n' +
+ ' ]\n' +
+ ']');
+ bt(
+ 'changeCollection.add({\n' +
+ ' name: "Jonathan" // New line inserted after this line on every save\n' +
+ ' , age: 25\n' +
+ '});');
+ bt(
+ 'changeCollection.add(\n' +
+ ' function() {\n' +
+ ' return true;\n' +
+ ' },\n' +
+ ' function() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ ');',
+ // -- output --
+ 'changeCollection.add(\n' +
+ ' function() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ ' , function() {\n' +
+ ' return true;\n' +
+ ' }\n' +
+ ');');
+
+
+ //============================================================
+ // Space in parens tests - (s = "", e = "")
+ reset_options();
+ opts.space_in_paren = false;
+ opts.space_in_empty_paren = false;
+ bt('if(p) foo(a,b);', 'if (p) foo(a, b);');
+ bt(
+ 'try{while(true){willThrow()}}catch(result)switch(result){case 1:++result }',
+ // -- output --
+ 'try {\n' +
+ ' while (true) {\n' +
+ ' willThrow()\n' +
+ ' }\n' +
+ '} catch (result) switch (result) {\n' +
+ ' case 1:\n' +
+ ' ++result\n' +
+ '}');
+ bt('((e/((a+(b)*c)-d))^2)*5;', '((e / ((a + (b) * c) - d)) ^ 2) * 5;');
+ bt(
+ 'function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ // -- output --
+ 'function f(a, b) {\n' +
+ ' if (a) b()\n' +
+ '}\n' +
+ '\n' +
+ 'function g(a, b) {\n' +
+ ' if (!a) b()\n' +
+ '}');
+ bt('a=[];', 'a = [];');
+ bt('a=[b,c,d];', 'a = [b, c, d];');
+ bt('a= f[b];', 'a = f[b];');
+ bt(
+ '{\n' +
+ ' files: [ {\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: [ "im/design_standards/*.*" ],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' } ]\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' files: [{\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: ["im/design_standards/*.*"],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' }]\n' +
+ '}');
+
+ // Space in parens tests - (s = "", e = "")
+ reset_options();
+ opts.space_in_paren = false;
+ opts.space_in_empty_paren = true;
+ bt('if(p) foo(a,b);', 'if (p) foo(a, b);');
+ bt(
+ 'try{while(true){willThrow()}}catch(result)switch(result){case 1:++result }',
+ // -- output --
+ 'try {\n' +
+ ' while (true) {\n' +
+ ' willThrow()\n' +
+ ' }\n' +
+ '} catch (result) switch (result) {\n' +
+ ' case 1:\n' +
+ ' ++result\n' +
+ '}');
+ bt('((e/((a+(b)*c)-d))^2)*5;', '((e / ((a + (b) * c) - d)) ^ 2) * 5;');
+ bt(
+ 'function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ // -- output --
+ 'function f(a, b) {\n' +
+ ' if (a) b()\n' +
+ '}\n' +
+ '\n' +
+ 'function g(a, b) {\n' +
+ ' if (!a) b()\n' +
+ '}');
+ bt('a=[];', 'a = [];');
+ bt('a=[b,c,d];', 'a = [b, c, d];');
+ bt('a= f[b];', 'a = f[b];');
+ bt(
+ '{\n' +
+ ' files: [ {\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: [ "im/design_standards/*.*" ],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' } ]\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' files: [{\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: ["im/design_standards/*.*"],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' }]\n' +
+ '}');
+
+ // Space in parens tests - (s = " ", e = "")
+ reset_options();
+ opts.space_in_paren = true;
+ opts.space_in_empty_paren = false;
+ bt('if(p) foo(a,b);', 'if ( p ) foo( a, b );');
+ bt(
+ 'try{while(true){willThrow()}}catch(result)switch(result){case 1:++result }',
+ // -- output --
+ 'try {\n' +
+ ' while ( true ) {\n' +
+ ' willThrow()\n' +
+ ' }\n' +
+ '} catch ( result ) switch ( result ) {\n' +
+ ' case 1:\n' +
+ ' ++result\n' +
+ '}');
+ bt('((e/((a+(b)*c)-d))^2)*5;', '( ( e / ( ( a + ( b ) * c ) - d ) ) ^ 2 ) * 5;');
+ bt(
+ 'function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ // -- output --
+ 'function f( a, b ) {\n' +
+ ' if ( a ) b()\n' +
+ '}\n' +
+ '\n' +
+ 'function g( a, b ) {\n' +
+ ' if ( !a ) b()\n' +
+ '}');
+ bt('a=[];', 'a = [];');
+ bt('a=[b,c,d];', 'a = [ b, c, d ];');
+ bt('a= f[b];', 'a = f[ b ];');
+ bt(
+ '{\n' +
+ ' files: [ {\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: [ "im/design_standards/*.*" ],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' } ]\n' +
+ '}');
+
+ // Space in parens tests - (s = " ", e = " ")
+ reset_options();
+ opts.space_in_paren = true;
+ opts.space_in_empty_paren = true;
+ bt('if(p) foo(a,b);', 'if ( p ) foo( a, b );');
+ bt(
+ 'try{while(true){willThrow()}}catch(result)switch(result){case 1:++result }',
+ // -- output --
+ 'try {\n' +
+ ' while ( true ) {\n' +
+ ' willThrow( )\n' +
+ ' }\n' +
+ '} catch ( result ) switch ( result ) {\n' +
+ ' case 1:\n' +
+ ' ++result\n' +
+ '}');
+ bt('((e/((a+(b)*c)-d))^2)*5;', '( ( e / ( ( a + ( b ) * c ) - d ) ) ^ 2 ) * 5;');
+ bt(
+ 'function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ // -- output --
+ 'function f( a, b ) {\n' +
+ ' if ( a ) b( )\n' +
+ '}\n' +
+ '\n' +
+ 'function g( a, b ) {\n' +
+ ' if ( !a ) b( )\n' +
+ '}');
+ bt('a=[];', 'a = [ ];');
+ bt('a=[b,c,d];', 'a = [ b, c, d ];');
+ bt('a= f[b];', 'a = f[ b ];');
+ bt(
+ '{\n' +
+ ' files: [ {\n' +
+ ' expand: true,\n' +
+ ' cwd: "www/gui/",\n' +
+ ' src: [ "im/design_standards/*.*" ],\n' +
+ ' dest: "www/gui/build"\n' +
+ ' } ]\n' +
+ '}');
+
+
+ //============================================================
+ // operator_position option - ensure no neswlines if preserve_newlines is false - ()
+ reset_options();
+ opts.operator_position = 'before-newline';
+ opts.preserve_newlines = false;
+ bt(
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+
+ // operator_position option - ensure no neswlines if preserve_newlines is false - ()
+ reset_options();
+ opts.operator_position = 'after-newline';
+ opts.preserve_newlines = false;
+ bt(
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+
+ // operator_position option - ensure no neswlines if preserve_newlines is false - ()
+ reset_options();
+ opts.operator_position = 'preserve-newline';
+ opts.preserve_newlines = false;
+ bt(
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b - c / d * e % f;\n' +
+ 'var res = g & h | i ^ j;\n' +
+ 'var res = (k && l || m) ? n : o;\n' +
+ 'var res = p >> q << r >>> s;\n' +
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;\n' +
+ 'ac + -ad');
+
+
+ //============================================================
+ // operator_position option - set to 'before-newline' (default value)
+ reset_options();
+
+ // comprehensive, various newlines
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b -\n' +
+ ' c /\n' +
+ ' d * e %\n' +
+ ' f;\n' +
+ 'var res = g & h |\n' +
+ ' i ^\n' +
+ ' j;\n' +
+ 'var res = (k &&\n' +
+ ' l ||\n' +
+ ' m) ?\n' +
+ ' n :\n' +
+ ' o;\n' +
+ 'var res = p >>\n' +
+ ' q <<\n' +
+ ' r >>>\n' +
+ ' s;\n' +
+ 'var res = t\n' +
+ '\n' +
+ ' ===\n' +
+ ' u !== v !=\n' +
+ ' w ==\n' +
+ ' x >=\n' +
+ ' y <= z > aa <\n' +
+ ' ab;\n' +
+ 'ac +\n' +
+ ' -ad');
+
+ // colon special case
+ bt(
+ 'var a = {\n' +
+ ' b\n' +
+ ': bval,\n' +
+ ' c:\n' +
+ 'cval\n' +
+ ' ,d: dval\n' +
+ '};\n' +
+ 'var e = f ? g\n' +
+ ': h;\n' +
+ 'var i = j ? k :\n' +
+ 'l;',
+ // -- output --
+ 'var a = {\n' +
+ ' b: bval,\n' +
+ ' c: cval,\n' +
+ ' d: dval\n' +
+ '};\n' +
+ 'var e = f ? g :\n' +
+ ' h;\n' +
+ 'var i = j ? k :\n' +
+ ' l;');
+
+ // catch-all, includes brackets and other various code
+ bt(
+ 'var d = 1;\n' +
+ 'if (a === b\n' +
+ ' && c) {\n' +
+ ' d = (c * everything\n' +
+ ' / something_else) %\n' +
+ ' b;\n' +
+ ' e\n' +
+ ' += d;\n' +
+ '\n' +
+ '} else if (!(complex && simple) ||\n' +
+ ' (emotion && emotion.name === "happy")) {\n' +
+ ' cryTearsOfJoy(many ||\n' +
+ ' anOcean\n' +
+ ' || aRiver);\n' +
+ '}',
+ // -- output --
+ 'var d = 1;\n' +
+ 'if (a === b &&\n' +
+ ' c) {\n' +
+ ' d = (c * everything /\n' +
+ ' something_else) %\n' +
+ ' b;\n' +
+ ' e\n' +
+ ' += d;\n' +
+ '\n' +
+ '} else if (!(complex && simple) ||\n' +
+ ' (emotion && emotion.name === "happy")) {\n' +
+ ' cryTearsOfJoy(many ||\n' +
+ ' anOcean ||\n' +
+ ' aRiver);\n' +
+ '}');
+
+
+ //============================================================
+ // operator_position option - set to 'after_newline'
+ reset_options();
+ opts.operator_position = 'after-newline';
+
+ // comprehensive, various newlines
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b\n' +
+ ' - c\n' +
+ ' / d * e\n' +
+ ' % f;\n' +
+ 'var res = g & h\n' +
+ ' | i\n' +
+ ' ^ j;\n' +
+ 'var res = (k\n' +
+ ' && l\n' +
+ ' || m)\n' +
+ ' ? n\n' +
+ ' : o;\n' +
+ 'var res = p\n' +
+ ' >> q\n' +
+ ' << r\n' +
+ ' >>> s;\n' +
+ 'var res = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' != w\n' +
+ ' == x\n' +
+ ' >= y <= z > aa\n' +
+ ' < ab;\n' +
+ 'ac\n' +
+ ' + -ad');
+
+ // colon special case
+ bt(
+ 'var a = {\n' +
+ ' b\n' +
+ ': bval,\n' +
+ ' c:\n' +
+ 'cval\n' +
+ ' ,d: dval\n' +
+ '};\n' +
+ 'var e = f ? g\n' +
+ ': h;\n' +
+ 'var i = j ? k :\n' +
+ 'l;',
+ // -- output --
+ 'var a = {\n' +
+ ' b: bval,\n' +
+ ' c: cval,\n' +
+ ' d: dval\n' +
+ '};\n' +
+ 'var e = f ? g\n' +
+ ' : h;\n' +
+ 'var i = j ? k\n' +
+ ' : l;');
+
+ // catch-all, includes brackets and other various code
+ bt(
+ 'var d = 1;\n' +
+ 'if (a === b\n' +
+ ' && c) {\n' +
+ ' d = (c * everything\n' +
+ ' / something_else) %\n' +
+ ' b;\n' +
+ ' e\n' +
+ ' += d;\n' +
+ '\n' +
+ '} else if (!(complex && simple) ||\n' +
+ ' (emotion && emotion.name === "happy")) {\n' +
+ ' cryTearsOfJoy(many ||\n' +
+ ' anOcean\n' +
+ ' || aRiver);\n' +
+ '}',
+ // -- output --
+ 'var d = 1;\n' +
+ 'if (a === b\n' +
+ ' && c) {\n' +
+ ' d = (c * everything\n' +
+ ' / something_else)\n' +
+ ' % b;\n' +
+ ' e\n' +
+ ' += d;\n' +
+ '\n' +
+ '} else if (!(complex && simple)\n' +
+ ' || (emotion && emotion.name === "happy")) {\n' +
+ ' cryTearsOfJoy(many\n' +
+ ' || anOcean\n' +
+ ' || aRiver);\n' +
+ '}');
+
+
+ //============================================================
+ // operator_position option - set to 'preserve-newline'
+ reset_options();
+ opts.operator_position = 'preserve-newline';
+
+ // comprehensive, various newlines
+ bt(
+ 'var res = a + b\n' +
+ '- c /\n' +
+ 'd * e\n' +
+ '%\n' +
+ 'f;\n' +
+ ' var res = g & h\n' +
+ '| i ^\n' +
+ 'j;\n' +
+ 'var res = (k &&\n' +
+ 'l\n' +
+ '|| m) ?\n' +
+ 'n\n' +
+ ': o\n' +
+ ';\n' +
+ 'var res = p\n' +
+ '>> q <<\n' +
+ 'r\n' +
+ '>>> s;\n' +
+ 'var res\n' +
+ ' = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ 'w\n' +
+ '== x >=\n' +
+ 'y <= z > aa <\n' +
+ 'ab;\n' +
+ 'ac +\n' +
+ '-ad',
+ // -- output --
+ 'var res = a + b\n' +
+ ' - c /\n' +
+ ' d * e\n' +
+ ' %\n' +
+ ' f;\n' +
+ 'var res = g & h\n' +
+ ' | i ^\n' +
+ ' j;\n' +
+ 'var res = (k &&\n' +
+ ' l\n' +
+ ' || m) ?\n' +
+ ' n\n' +
+ ' : o;\n' +
+ 'var res = p\n' +
+ ' >> q <<\n' +
+ ' r\n' +
+ ' >>> s;\n' +
+ 'var res = t\n' +
+ '\n' +
+ ' === u !== v\n' +
+ ' !=\n' +
+ ' w\n' +
+ ' == x >=\n' +
+ ' y <= z > aa <\n' +
+ ' ab;\n' +
+ 'ac +\n' +
+ ' -ad');
+
+ // colon special case
+ bt(
+ 'var a = {\n' +
+ ' b\n' +
+ ': bval,\n' +
+ ' c:\n' +
+ 'cval\n' +
+ ' ,d: dval\n' +
+ '};\n' +
+ 'var e = f ? g\n' +
+ ': h;\n' +
+ 'var i = j ? k :\n' +
+ 'l;',
+ // -- output --
+ 'var a = {\n' +
+ ' b: bval,\n' +
+ ' c: cval,\n' +
+ ' d: dval\n' +
+ '};\n' +
+ 'var e = f ? g\n' +
+ ' : h;\n' +
+ 'var i = j ? k :\n' +
+ ' l;');
+
+ // catch-all, includes brackets and other various code
+ bt(
+ 'var d = 1;\n' +
+ 'if (a === b\n' +
+ ' && c) {\n' +
+ ' d = (c * everything\n' +
+ ' / something_else) %\n' +
+ ' b;\n' +
+ ' e\n' +
+ ' += d;\n' +
+ '\n' +
+ '} else if (!(complex && simple) ||\n' +
+ ' (emotion && emotion.name === "happy")) {\n' +
+ ' cryTearsOfJoy(many ||\n' +
+ ' anOcean\n' +
+ ' || aRiver);\n' +
+ '}');
+
+
+ //============================================================
+ // Yield tests
+ reset_options();
+ bt('yield /foo\\//;');
+ bt('result = yield pgClient.query_(queryString);');
+ bt('yield [1, 2]');
+ bt('yield* bar();');
+
+ // yield should have no space between yield and star
+ bt('yield * bar();', 'yield* bar();');
+
+ // yield should have space between star and generator
+ bt('yield *bar();', 'yield* bar();');
+
+
+ //============================================================
+ // Async / await tests
+ reset_options();
+ bt('async function foo() {}');
+ bt('let w = async function foo() {}');
+ bt(
+ 'async function foo() {}\n' +
+ 'var x = await foo();');
+
+ // async function as an input to another function
+ bt('wrapper(async function foo() {})');
+
+ // await on inline anonymous function. should have a space after await
+ bt(
+ 'async function() {\n' +
+ ' var w = await(async function() {\n' +
+ ' return await foo();\n' +
+ ' })();\n' +
+ '}',
+ // -- output --
+ 'async function() {\n' +
+ ' var w = await (async function() {\n' +
+ ' return await foo();\n' +
+ ' })();\n' +
+ '}');
+
+ // ensure that this doesn't break anyone with the async library
+ bt('async.map(function(t) {})');
+
+
+ //============================================================
+ // e4x - Test that e4x literals passed through when e4x-option is enabled
+ reset_options();
+ opts.e4x = true;
+ bt(
+ 'xml=\n' +
+ ' foo x ;',
+ // -- output --
+ 'xml = \n' +
+ ' foo x ;');
+ bt(' ');
+ bt(' ');
+ bt(' ');
+ bt(' ');
+ bt(' ');
+
+ // Handles inline expressions
+ bt(
+ 'xml=<{a} b="c">\n' +
+ ' foo x{a}>;',
+ // -- output --
+ 'xml = <{a} b="c">\n' +
+ ' foo x{a}>;');
+ bt(
+ 'xml=<{a} b="c">\n' +
+ ' \n' +
+ ' foo x{a}>;',
+ // -- output --
+ 'xml = <{a} b="c">\n' +
+ ' \n' +
+ ' foo x{a}>;');
+
+ // xml literals with special characters in elem names - see http://www.w3.org/TR/REC-xml/#NT-NameChar
+ bt('xml = <_:.valid.xml- _:.valid.xml-="123"/>;');
+
+ // xml literals with attributes without equal sign
+ bt('xml = ;');
+
+ // Handles CDATA
+ bt(
+ 'xml=\n' +
+ ' foo x/]]>;',
+ // -- output --
+ 'xml = \n' +
+ ' foo x/]]>;');
+ bt('xml=;', 'xml = ;');
+ bt('xml= {}]]>;', 'xml = {}]]>;');
+
+ // JSX - working jsx from http://prettydiff.com/unit_tests/beautification_javascript_jsx.txt
+ bt(
+ 'var ListItem = React.createClass({\n' +
+ ' render: function() {\n' +
+ ' return (\n' +
+ ' \n' +
+ ' \n' +
+ ' this.props.item.name\n' +
+ ' \n' +
+ ' \n' +
+ ' );\n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'var List = React.createClass({\n' +
+ ' renderList: function() {\n' +
+ ' return this.props.items.map(function(item) {\n' +
+ ' return ;\n' +
+ ' });\n' +
+ ' },\n' +
+ '\n' +
+ ' render: function() {\n' +
+ ' return \n' +
+ ' this.renderList()\n' +
+ ' \n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'var Mist = React.createClass({\n' +
+ ' renderList: function() {\n' +
+ ' return this.props.items.map(function(item) {\n' +
+ ' return {item}} key={item.id} />;\n' +
+ ' });\n' +
+ ' }\n' +
+ '});');
+ bt(
+ '// JSX\n' +
+ 'var box = \n' +
+ ' {shouldShowAnswer(user) ?\n' +
+ ' no : \n' +
+ ' Text Content\n' +
+ ' }\n' +
+ ' ;\n' +
+ 'var a = function() {\n' +
+ ' return asdf ;\n' +
+ '};\n' +
+ '\n' +
+ 'var HelloMessage = React.createClass({\n' +
+ ' render: function() {\n' +
+ ' return Hello {this.props.name}
;\n' +
+ ' }\n' +
+ '});\n' +
+ 'React.render( , mountNode);');
+ bt(
+ 'var Timer = React.createClass({\n' +
+ ' getInitialState: function() {\n' +
+ ' return {\n' +
+ ' secondsElapsed: 0\n' +
+ ' };\n' +
+ ' },\n' +
+ ' tick: function() {\n' +
+ ' this.setState({\n' +
+ ' secondsElapsed: this.state.secondsElapsed + 1\n' +
+ ' });\n' +
+ ' },\n' +
+ ' componentDidMount: function() {\n' +
+ ' this.interval = setInterval(this.tick, 1000);\n' +
+ ' },\n' +
+ ' componentWillUnmount: function() {\n' +
+ ' clearInterval(this.interval);\n' +
+ ' },\n' +
+ ' render: function() {\n' +
+ ' return (\n' +
+ ' Seconds Elapsed: {this.state.secondsElapsed}
\n' +
+ ' );\n' +
+ ' }\n' +
+ '});\n' +
+ 'React.render( , mountNode);');
+ bt(
+ 'var TodoList = React.createClass({\n' +
+ ' render: function() {\n' +
+ ' var createItem = function(itemText) {\n' +
+ ' return {itemText} ;\n' +
+ ' };\n' +
+ ' return {this.props.items.map(createItem)} ;\n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'var TodoApp = React.createClass({\n' +
+ ' getInitialState: function() {\n' +
+ ' return {\n' +
+ ' items: [],\n' +
+ ' text: \'\'\n' +
+ ' };\n' +
+ ' },\n' +
+ ' onChange: function(e) {\n' +
+ ' this.setState({\n' +
+ ' text: e.target.value\n' +
+ ' });\n' +
+ ' },\n' +
+ ' handleSubmit: function(e) {\n' +
+ ' e.preventDefault();\n' +
+ ' var nextItems = this.state.items.concat([this.state.text]);\n' +
+ ' var nextText = \'\';\n' +
+ ' this.setState({\n' +
+ ' items: nextItems,\n' +
+ ' text: nextText\n' +
+ ' });\n' +
+ ' },\n' +
+ ' render: function() {\n' +
+ ' return (\n' +
+ ' \n' +
+ '
TODO \n' +
+ ' \n' +
+ ' \n' +
+ ' \n' +
+ ' );\n' +
+ ' }\n' +
+ '});\n' +
+ 'React.render( , mountNode);');
+ bt(
+ 'var converter = new Showdown.converter();\n' +
+ 'var MarkdownEditor = React.createClass({\n' +
+ ' getInitialState: function() {\n' +
+ ' return {value: \'Type some *markdown* here!\'};\n' +
+ ' },\n' +
+ ' handleChange: function() {\n' +
+ ' this.setState({value: this.refs.textarea.getDOMNode().value});\n' +
+ ' },\n' +
+ ' render: function() {\n' +
+ ' return (\n' +
+ ' \n' +
+ '
Input \n' +
+ '
\n' +
+ '
Output \n' +
+ '
\n' +
+ '
\n' +
+ ' );\n' +
+ ' }\n' +
+ '});\n' +
+ 'React.render( , mountNode);',
+ // -- output --
+ 'var converter = new Showdown.converter();\n' +
+ 'var MarkdownEditor = React.createClass({\n' +
+ ' getInitialState: function() {\n' +
+ ' return {\n' +
+ ' value: \'Type some *markdown* here!\'\n' +
+ ' };\n' +
+ ' },\n' +
+ ' handleChange: function() {\n' +
+ ' this.setState({\n' +
+ ' value: this.refs.textarea.getDOMNode().value\n' +
+ ' });\n' +
+ ' },\n' +
+ ' render: function() {\n' +
+ ' return (\n' +
+ ' \n' +
+ '
Input \n' +
+ '
\n' +
+ '
Output \n' +
+ '
\n' +
+ '
\n' +
+ ' );\n' +
+ ' }\n' +
+ '});\n' +
+ 'React.render( , mountNode);');
+
+ // JSX - Not quite correct jsx formatting that still works
+ bt(
+ 'var content = (\n' +
+ ' \n' +
+ ' {/* child comment, put {} around */}\n' +
+ ' \n' +
+ ' \n' +
+ ' );\n' +
+ 'var qwer = A dropdown list Do Something Do Something Fun! Do Something Else ;\n' +
+ 'render(dropdown);',
+ // -- output --
+ 'var content = (\n' +
+ ' \n' +
+ ' {/* child comment, put {} around */}\n' +
+ ' \n' +
+ ' \n' +
+ ');\n' +
+ 'var qwer = A dropdown list Do Something Do Something Fun! Do Something Else ;\n' +
+ 'render(dropdown);');
+
+ // Handles messed up tags, as long as it isn't the same name
+ // as the root tag. Also handles tags of same name as root tag
+ // as long as nesting matches.
+ bt(
+ 'xml= ;',
+ // -- output --
+ 'xml = ;');
+
+ // If xml is not terminated, the remainder of the file is treated
+ // as part of the xml-literal (passed through unaltered)
+ test_fragment(
+ 'xml=\n' +
+ 'c \n' +
+ 'c\n' +
+ ' c \n' +
+ ' \n' +
+ ' );\n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'let a = React.createClass({\n' +
+ ' render() {\n' +
+ ' return (\n' +
+ ' \n' +
+ ' c \n' +
+ '
\n' +
+ ' );\n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'let a = React.createClass({\n' +
+ ' render() {\n' +
+ ' return (\n' +
+ ' \n' +
+ ' c \n' +
+ '
\n' +
+ ' );\n' +
+ ' }\n' +
+ '});');
+ bt(
+ 'let a = React.createClass({\n' +
+ ' render() {\n' +
+ ' return (\n' +
+ ' <{e} className = {d}>\n' +
+ ' c \n' +
+ ' {e}>\n' +
+ ' );\n' +
+ ' }\n' +
+ '});');
+
+ // Issue #914 - Multiline attribute in root tag
+ bt(
+ 'return (\n' +
+ ' {\n' +
+ ' e.preventDefault()\n' +
+ ' onClick()\n' +
+ ' }}>\n' +
+ ' {children}\n' +
+ ' \n' +
+ ');');
+ bt(
+ 'return (\n' +
+ ' <{\n' +
+ ' a + b\n' +
+ ' } href="#"\n' +
+ ' onClick={e => {\n' +
+ ' e.preventDefault()\n' +
+ ' onClick()\n' +
+ ' }}>\n' +
+ ' {children}\n' +
+ ' {\n' +
+ ' a + b\n' +
+ ' }>\n' +
+ ');');
+ bt(
+ 'return (\n' +
+ ' <{\n' +
+ ' a + b\n' +
+ ' } href="#"\n' +
+ ' onClick={e => {\n' +
+ ' e.preventDefault()\n' +
+ ' onClick()\n' +
+ ' }}>\n' +
+ ' {children}\n' +
+ ' {a + b}>\n' +
+ ' );',
+ // -- output --
+ 'return (\n' +
+ ' <{\n' +
+ ' a + b\n' +
+ ' } href="#"\n' +
+ ' onClick={e => {\n' +
+ ' e.preventDefault()\n' +
+ ' onClick()\n' +
+ ' }}>\n' +
+ ' {children}\n' +
+ ' {a + b}>\n' +
+ ');');
+
+
+ //============================================================
+ // e4x disabled
+ reset_options();
+ opts.e4x = false;
+ bt(
+ 'xml=\n' +
+ ' foo x ;',
+ // -- output --
+ 'xml = < a b = "c" > < d / > < e >\n' +
+ ' foo < /e>x ;');
+
+
+ //============================================================
+ // Multiple braces
+ reset_options();
+ bt(
+ '{{}/z/}',
+ // -- output --
+ '{\n' +
+ ' {}\n' +
+ ' /z/\n' +
+ '}');
+
+
+ //============================================================
+ // Beautify preserve formatting
+ reset_options();
+ bt(
+ '/* beautify preserve:start */\n' +
+ '/* beautify preserve:end */');
+ bt(
+ '/* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */');
+ bt(
+ 'var a = 1;\n' +
+ '/* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */');
+ bt('/* beautify preserve:start */ {asdklgh;y;;{}dd2d}/* beautify preserve:end */');
+ bt(
+ 'var a = 1;\n' +
+ '/* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */',
+ // -- output --
+ 'var a = 1;\n' +
+ '/* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */');
+ bt(
+ 'var a = 1;\n' +
+ ' /* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */',
+ // -- output --
+ 'var a = 1;\n' +
+ '/* beautify preserve:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify preserve:end */');
+ bt(
+ 'var a = {\n' +
+ ' /* beautify preserve:start */\n' +
+ ' one : 1\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ ' /* beautify preserve:end */\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/* beautify preserve:start */\n' +
+ ' one : 1,\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ '/* beautify preserve:end */\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify preserve:start */\n' +
+ ' one : 1,\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ '/* beautify preserve:end */\n' +
+ '};');
+
+ // one space before and after required, only single spaces inside.
+ bt(
+ 'var a = {\n' +
+ '/* beautify preserve:start */\n' +
+ ' one : 1,\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify preserve:start */\n' +
+ ' one: 1,\n' +
+ ' two: 2,\n' +
+ ' three: 3,\n' +
+ ' ten: 10\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/*beautify preserve:start*/\n' +
+ ' one : 1,\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /*beautify preserve:start*/\n' +
+ ' one: 1,\n' +
+ ' two: 2,\n' +
+ ' three: 3,\n' +
+ ' ten: 10\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/*beautify preserve:start*/\n' +
+ ' one : 1,\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ ' ten : 10\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /*beautify preserve:start*/\n' +
+ ' one: 1,\n' +
+ ' two: 2,\n' +
+ ' three: 3,\n' +
+ ' ten: 10\n' +
+ '};');
+
+ // Directive: ignore
+ bt(
+ '/* beautify ignore:start */\n' +
+ '/* beautify ignore:end */');
+ bt(
+ '/* beautify ignore:start */\n' +
+ ' var a,,,{ 1;\n' +
+ '/* beautify ignore:end */');
+ bt(
+ 'var a = 1;\n' +
+ '/* beautify ignore:start */\n' +
+ ' var a = 1;\n' +
+ '/* beautify ignore:end */');
+ bt('/* beautify ignore:start */ {asdklgh;y;+++;dd2d}/* beautify ignore:end */');
+ bt(
+ 'var a = 1;\n' +
+ '/* beautify ignore:start */\n' +
+ ' var a,,,{ 1;\n' +
+ '/* beautify ignore:end */',
+ // -- output --
+ 'var a = 1;\n' +
+ '/* beautify ignore:start */\n' +
+ ' var a,,,{ 1;\n' +
+ '/* beautify ignore:end */');
+ bt(
+ 'var a = 1;\n' +
+ ' /* beautify ignore:start */\n' +
+ ' var a,,,{ 1;\n' +
+ '/* beautify ignore:end */',
+ // -- output --
+ 'var a = 1;\n' +
+ '/* beautify ignore:start */\n' +
+ ' var a,,,{ 1;\n' +
+ '/* beautify ignore:end */');
+ bt(
+ 'var a = {\n' +
+ ' /* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' two : 2,\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ ' /* beautify ignore:end */\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' two : 2,\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ '/* beautify ignore:end */\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' two : 2,\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ '/* beautify ignore:end */\n' +
+ '};');
+
+ // Directives - multiple and interacting
+ bt(
+ 'var a = {\n' +
+ '/* beautify preserve:start */\n' +
+ '/* beautify preserve:start */\n' +
+ ' one : 1,\n' +
+ ' /* beautify preserve:end */\n' +
+ ' two : 2,\n' +
+ ' three : 3,\n' +
+ '/* beautify preserve:start */\n' +
+ ' ten : 10\n' +
+ '/* beautify preserve:end */\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify preserve:start */\n' +
+ '/* beautify preserve:start */\n' +
+ ' one : 1,\n' +
+ ' /* beautify preserve:end */\n' +
+ ' two: 2,\n' +
+ ' three: 3,\n' +
+ ' /* beautify preserve:start */\n' +
+ ' ten : 10\n' +
+ '/* beautify preserve:end */\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two : 2,\n' +
+ '/* beautify ignore:start */\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ '/* beautify ignore:end */\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two: 2,\n' +
+ ' /* beautify ignore:start */\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ '/* beautify ignore:end */\n' +
+ '};');
+
+ // Starts can occur together, ignore:end must occur alone.
+ bt(
+ 'var a = {\n' +
+ '/* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' NOTE: ignore end block does not support starting other directives\n' +
+ ' This does not match the ending the ignore...\n' +
+ ' /* beautify ignore:end preserve:start */\n' +
+ ' two : 2,\n' +
+ '/* beautify ignore:start */\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ ' ==The next comment ends the starting ignore==\n' +
+ '/* beautify ignore:end */\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify ignore:start */\n' +
+ ' one : 1\n' +
+ ' NOTE: ignore end block does not support starting other directives\n' +
+ ' This does not match the ending the ignore...\n' +
+ ' /* beautify ignore:end preserve:start */\n' +
+ ' two : 2,\n' +
+ '/* beautify ignore:start */\n' +
+ ' three : {\n' +
+ ' ten : 10\n' +
+ ' ==The next comment ends the starting ignore==\n' +
+ '/* beautify ignore:end */\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/* beautify ignore:start preserve:start */\n' +
+ ' one : {\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two : 2,\n' +
+ ' /* beautify ignore:start */\n' +
+ ' three : {\n' +
+ '/* beautify ignore:end */\n' +
+ ' ten : 10\n' +
+ ' // This is all preserved\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify ignore:start preserve:start */\n' +
+ ' one : {\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two : 2,\n' +
+ ' /* beautify ignore:start */\n' +
+ ' three : {\n' +
+ '/* beautify ignore:end */\n' +
+ ' ten : 10\n' +
+ ' // This is all preserved\n' +
+ '};');
+ bt(
+ 'var a = {\n' +
+ '/* beautify ignore:start preserve:start */\n' +
+ ' one : {\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two : 2,\n' +
+ ' /* beautify ignore:start */\n' +
+ ' three : {\n' +
+ '/* beautify ignore:end */\n' +
+ ' ten : 10,\n' +
+ '/* beautify preserve:end */\n' +
+ ' eleven: 11\n' +
+ '};',
+ // -- output --
+ 'var a = {\n' +
+ ' /* beautify ignore:start preserve:start */\n' +
+ ' one : {\n' +
+ ' /* beautify ignore:end */\n' +
+ ' two : 2,\n' +
+ ' /* beautify ignore:start */\n' +
+ ' three : {\n' +
+ '/* beautify ignore:end */\n' +
+ ' ten : 10,\n' +
+ '/* beautify preserve:end */\n' +
+ ' eleven: 11\n' +
+ '};');
+
+
+ //============================================================
+ // Comments and tests
+ reset_options();
+
+ // #913
+ bt(
+ 'class test {\n' +
+ ' method1() {\n' +
+ ' let resp = null;\n' +
+ ' }\n' +
+ ' /**\n' +
+ ' * @param {String} id\n' +
+ ' */\n' +
+ ' method2(id) {\n' +
+ ' let resp2 = null;\n' +
+ ' }\n' +
+ '}');
+
+ // #1090
+ bt(
+ 'for (var i = 0; i < 20; ++i) // loop\n' +
+ ' if (i % 3) {\n' +
+ ' console.log(i);\n' +
+ ' }\n' +
+ 'console.log("done");');
+
+ // #1043
+ bt(
+ 'var o = {\n' +
+ ' k: 0\n' +
+ '}\n' +
+ '// ...\n' +
+ 'foo(o)');
+
+ // #713 and #964
+ bt(
+ 'Meteor.call("foo", bar, function(err, result) {\n' +
+ ' Session.set("baz", result.lorem)\n' +
+ '})\n' +
+ '//blah blah');
+
+ // #815
+ bt(
+ 'foo()\n' +
+ '// this is a comment\n' +
+ 'bar()\n' +
+ '\n' +
+ 'const foo = 5\n' +
+ '// comment\n' +
+ 'bar()');
+
+ // This shows current behavior. Note #1069 is not addressed yet.
+ bt(
+ 'if (modulus === 2) {\n' +
+ ' // i might be odd here\n' +
+ ' i += (i & 1);\n' +
+ ' // now i is guaranteed to be even\n' +
+ ' // this block is obviously about the statement above\n' +
+ '\n' +
+ ' // #1069 This should attach to the block below\n' +
+ ' // this comment is about the block after it.\n' +
+ '} else {\n' +
+ ' // rounding up using integer arithmetic only\n' +
+ ' if (i % modulus)\n' +
+ ' i += modulus - (i % modulus);\n' +
+ ' // now i is divisible by modulus\n' +
+ ' // behavior of comments should be different for single statements vs block statements/expressions\n' +
+ '}\n' +
+ '\n' +
+ 'if (modulus === 2)\n' +
+ ' // i might be odd here\n' +
+ ' i += (i & 1);\n' +
+ '// now i is guaranteed to be even\n' +
+ '// non-braced comments unindent immediately\n' +
+ '\n' +
+ '// this comment is about the block after it.\n' +
+ 'else\n' +
+ ' // rounding up using integer arithmetic only\n' +
+ ' if (i % modulus)\n' +
+ ' i += modulus - (i % modulus);\n' +
+ '// behavior of comments should be different for single statements vs block statements/expressions');
+
+
+ //============================================================
+ // Template Formatting
+ reset_options();
+ bt('=$view["name"]; ?>');
+ bt('a = = external() ?>;');
+ bt(
+ '");\n' +
+ '}\n' +
+ '?>');
+ bt('a = <%= external() %>;');
+
+
+ //============================================================
+ // jslint and space after anon function - (f = " ", c = "")
+ reset_options();
+ opts.jslint_happy = true;
+ opts.space_after_anon_function = true;
+ bt(
+ 'a=typeof(x)',
+ // -- output --
+ 'a = typeof (x)');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'function(){}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'function () {}');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ 'x: function(){}\n' +
+ '}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ ' x: function () {}\n' +
+ '}');
+ bt(
+ 'function () {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}');
+ bt(
+ 'switch(x) {case 0: case 1: a(); break; default: break}',
+ // -- output --
+ 'switch (x) {\n' +
+ 'case 0:\n' +
+ 'case 1:\n' +
+ ' a();\n' +
+ ' break;\n' +
+ 'default:\n' +
+ ' break\n' +
+ '}');
+ bt(
+ 'switch(x){case -1:break;case !y:break;}',
+ // -- output --
+ 'switch (x) {\n' +
+ 'case -1:\n' +
+ ' break;\n' +
+ 'case !y:\n' +
+ ' break;\n' +
+ '}');
+
+ // typical greasemonkey start
+ test_fragment(
+ '// comment 2\n' +
+ '(function ()');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {}, d = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {},\n' +
+ 'd = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var o2=$.extend(a);function(){alert(x);}',
+ // -- output --
+ 'var o2 = $.extend(a);\n' +
+ '\n' +
+ 'function () {\n' +
+ ' alert(x);\n' +
+ '}');
+ bt(
+ 'function*() {\n' +
+ ' yield 1;\n' +
+ '}',
+ // -- output --
+ 'function* () {\n' +
+ ' yield 1;\n' +
+ '}');
+ bt(
+ 'function* x() {\n' +
+ ' yield 1;\n' +
+ '}');
+
+ // jslint and space after anon function - (f = " ", c = "")
+ reset_options();
+ opts.jslint_happy = true;
+ opts.space_after_anon_function = false;
+ bt(
+ 'a=typeof(x)',
+ // -- output --
+ 'a = typeof (x)');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'function(){}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'function () {}');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ 'x: function(){}\n' +
+ '}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ ' x: function () {}\n' +
+ '}');
+ bt(
+ 'function () {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}');
+ bt(
+ 'switch(x) {case 0: case 1: a(); break; default: break}',
+ // -- output --
+ 'switch (x) {\n' +
+ 'case 0:\n' +
+ 'case 1:\n' +
+ ' a();\n' +
+ ' break;\n' +
+ 'default:\n' +
+ ' break\n' +
+ '}');
+ bt(
+ 'switch(x){case -1:break;case !y:break;}',
+ // -- output --
+ 'switch (x) {\n' +
+ 'case -1:\n' +
+ ' break;\n' +
+ 'case !y:\n' +
+ ' break;\n' +
+ '}');
+
+ // typical greasemonkey start
+ test_fragment(
+ '// comment 2\n' +
+ '(function ()');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {}, d = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {},\n' +
+ 'd = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var o2=$.extend(a);function(){alert(x);}',
+ // -- output --
+ 'var o2 = $.extend(a);\n' +
+ '\n' +
+ 'function () {\n' +
+ ' alert(x);\n' +
+ '}');
+ bt(
+ 'function*() {\n' +
+ ' yield 1;\n' +
+ '}',
+ // -- output --
+ 'function* () {\n' +
+ ' yield 1;\n' +
+ '}');
+ bt(
+ 'function* x() {\n' +
+ ' yield 1;\n' +
+ '}');
+
+ // jslint and space after anon function - (f = " ", c = " ")
+ reset_options();
+ opts.jslint_happy = false;
+ opts.space_after_anon_function = true;
+ bt(
+ 'a=typeof(x)',
+ // -- output --
+ 'a = typeof (x)');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'function(){}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'function () {}');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ 'x: function(){}\n' +
+ '}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ ' x: function () {}\n' +
+ '}');
+ bt(
+ 'function () {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}');
+ bt(
+ 'switch(x) {case 0: case 1: a(); break; default: break}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case 0:\n' +
+ ' case 1:\n' +
+ ' a();\n' +
+ ' break;\n' +
+ ' default:\n' +
+ ' break\n' +
+ '}');
+ bt(
+ 'switch(x){case -1:break;case !y:break;}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case -1:\n' +
+ ' break;\n' +
+ ' case !y:\n' +
+ ' break;\n' +
+ '}');
+
+ // typical greasemonkey start
+ test_fragment(
+ '// comment 2\n' +
+ '(function ()');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {}, d = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {},\n' +
+ 'd = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function () {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var o2=$.extend(a);function(){alert(x);}',
+ // -- output --
+ 'var o2 = $.extend(a);\n' +
+ '\n' +
+ 'function () {\n' +
+ ' alert(x);\n' +
+ '}');
+ bt(
+ 'function*() {\n' +
+ ' yield 1;\n' +
+ '}',
+ // -- output --
+ 'function* () {\n' +
+ ' yield 1;\n' +
+ '}');
+ bt(
+ 'function* x() {\n' +
+ ' yield 1;\n' +
+ '}');
+
+ // jslint and space after anon function - (f = "", c = " ")
+ reset_options();
+ opts.jslint_happy = false;
+ opts.space_after_anon_function = false;
+ bt(
+ 'a=typeof(x)',
+ // -- output --
+ 'a = typeof(x)');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'function(){}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'function() {}');
+ bt(
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ 'x: function(){}\n' +
+ '}',
+ // -- output --
+ 'x();\n' +
+ '\n' +
+ 'var x = {\n' +
+ ' x: function() {}\n' +
+ '}');
+ bt(
+ 'function () {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}',
+ // -- output --
+ 'function() {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}');
+ bt(
+ 'switch(x) {case 0: case 1: a(); break; default: break}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case 0:\n' +
+ ' case 1:\n' +
+ ' a();\n' +
+ ' break;\n' +
+ ' default:\n' +
+ ' break\n' +
+ '}');
+ bt(
+ 'switch(x){case -1:break;case !y:break;}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case -1:\n' +
+ ' break;\n' +
+ ' case !y:\n' +
+ ' break;\n' +
+ '}');
+
+ // typical greasemonkey start
+ test_fragment(
+ '// comment 2\n' +
+ '(function()');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {}, d = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function() {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var a2, b2, c2, d2 = 0, c = function() {},\n' +
+ 'd = \'\';',
+ // -- output --
+ 'var a2, b2, c2, d2 = 0,\n' +
+ ' c = function() {},\n' +
+ ' d = \'\';');
+ bt(
+ 'var o2=$.extend(a);function(){alert(x);}',
+ // -- output --
+ 'var o2 = $.extend(a);\n' +
+ '\n' +
+ 'function() {\n' +
+ ' alert(x);\n' +
+ '}');
+ bt(
+ 'function*() {\n' +
+ ' yield 1;\n' +
+ '}');
+ bt(
+ 'function* x() {\n' +
+ ' yield 1;\n' +
+ '}');
+
+
+ //============================================================
+ // Regression tests
+ reset_options();
+
+ // Issue 241
+ bt(
+ 'obj\n' +
+ ' .last({\n' +
+ ' foo: 1,\n' +
+ ' bar: 2\n' +
+ ' });\n' +
+ 'var test = 1;');
+ bt(
+ 'obj\n' +
+ ' .last(a, function() {\n' +
+ ' var test;\n' +
+ ' });\n' +
+ 'var test = 1;');
+ bt(
+ 'obj.first()\n' +
+ ' .second()\n' +
+ ' .last(function(err, response) {\n' +
+ ' console.log(err);\n' +
+ ' });');
+
+ // Issue 268 and 275
+ bt(
+ 'obj.last(a, function() {\n' +
+ ' var test;\n' +
+ '});\n' +
+ 'var test = 1;');
+ bt(
+ 'obj.last(a,\n' +
+ ' function() {\n' +
+ ' var test;\n' +
+ ' });\n' +
+ 'var test = 1;');
+ bt(
+ '(function() {if (!window.FOO) window.FOO || (window.FOO = function() {var b = {bar: "zort"};});})();',
+ // -- output --
+ '(function() {\n' +
+ ' if (!window.FOO) window.FOO || (window.FOO = function() {\n' +
+ ' var b = {\n' +
+ ' bar: "zort"\n' +
+ ' };\n' +
+ ' });\n' +
+ '})();');
+
+ // Issue 281
+ bt(
+ 'define(["dojo/_base/declare", "my/Employee", "dijit/form/Button",\n' +
+ ' "dojo/_base/lang", "dojo/Deferred"\n' +
+ '], function(declare, Employee, Button, lang, Deferred) {\n' +
+ ' return declare(Employee, {\n' +
+ ' constructor: function() {\n' +
+ ' new Button({\n' +
+ ' onClick: lang.hitch(this, function() {\n' +
+ ' new Deferred().then(lang.hitch(this, function() {\n' +
+ ' this.salary * 0.25;\n' +
+ ' }));\n' +
+ ' })\n' +
+ ' });\n' +
+ ' }\n' +
+ ' });\n' +
+ '});');
+ bt(
+ 'define(["dojo/_base/declare", "my/Employee", "dijit/form/Button",\n' +
+ ' "dojo/_base/lang", "dojo/Deferred"\n' +
+ ' ],\n' +
+ ' function(declare, Employee, Button, lang, Deferred) {\n' +
+ ' return declare(Employee, {\n' +
+ ' constructor: function() {\n' +
+ ' new Button({\n' +
+ ' onClick: lang.hitch(this, function() {\n' +
+ ' new Deferred().then(lang.hitch(this, function() {\n' +
+ ' this.salary * 0.25;\n' +
+ ' }));\n' +
+ ' })\n' +
+ ' });\n' +
+ ' }\n' +
+ ' });\n' +
+ ' });');
+
+ // Issue 459
+ bt(
+ '(function() {\n' +
+ ' return {\n' +
+ ' foo: function() {\n' +
+ ' return "bar";\n' +
+ ' },\n' +
+ ' bar: ["bar"]\n' +
+ ' };\n' +
+ '}());');
+
+ // Issue 505 - strings should end at newline unless continued by backslash
+ bt(
+ 'var name = "a;\n' +
+ 'name = "b";');
+ bt(
+ 'var name = "a;\\\n' +
+ ' name = b";');
+
+ // Issue 514 - some operators require spaces to distinguish them
+ bt('var c = "_ACTION_TO_NATIVEAPI_" + ++g++ + +new Date;');
+ bt('var c = "_ACTION_TO_NATIVEAPI_" - --g-- - -new Date;');
+
+ // Issue 440 - reserved words can be used as object property names
+ bt(
+ 'a = {\n' +
+ ' function: {},\n' +
+ ' "function": {},\n' +
+ ' throw: {},\n' +
+ ' "throw": {},\n' +
+ ' var: {},\n' +
+ ' "var": {},\n' +
+ ' set: {},\n' +
+ ' "set": {},\n' +
+ ' get: {},\n' +
+ ' "get": {},\n' +
+ ' if: {},\n' +
+ ' "if": {},\n' +
+ ' then: {},\n' +
+ ' "then": {},\n' +
+ ' else: {},\n' +
+ ' "else": {},\n' +
+ ' yay: {}\n' +
+ '};');
+
+ // Issue 331 - if-else with braces edge case
+ bt(
+ 'if(x){a();}else{b();}if(y){c();}',
+ // -- output --
+ 'if (x) {\n' +
+ ' a();\n' +
+ '} else {\n' +
+ ' b();\n' +
+ '}\n' +
+ 'if (y) {\n' +
+ ' c();\n' +
+ '}');
+
+ // Issue 485 - ensure function declarations behave the same in arrays as elsewhere
+ bt(
+ 'var v = ["a",\n' +
+ ' function() {\n' +
+ ' return;\n' +
+ ' }, {\n' +
+ ' id: 1\n' +
+ ' }\n' +
+ '];');
+ bt(
+ 'var v = ["a", function() {\n' +
+ ' return;\n' +
+ '}, {\n' +
+ ' id: 1\n' +
+ '}];');
+
+ // Issue 382 - initial totally cursory support for es6 module export
+ bt(
+ 'module "Even" {\n' +
+ ' import odd from "Odd";\n' +
+ ' export function sum(x, y) {\n' +
+ ' return x + y;\n' +
+ ' }\n' +
+ ' export var pi = 3.141593;\n' +
+ ' export default moduleName;\n' +
+ '}');
+ bt(
+ 'module "Even" {\n' +
+ ' export default function div(x, y) {}\n' +
+ '}');
+
+ // Issue 889 - export default { ... }
+ bt(
+ 'export default {\n' +
+ ' func1() {},\n' +
+ ' func2() {}\n' +
+ ' func3() {}\n' +
+ '}');
+ bt(
+ 'export default {\n' +
+ ' a() {\n' +
+ ' return 1;\n' +
+ ' },\n' +
+ ' b() {\n' +
+ ' return 2;\n' +
+ ' },\n' +
+ ' c() {\n' +
+ ' return 3;\n' +
+ ' }\n' +
+ '}');
+
+ // Issue 508
+ bt('set["name"]');
+ bt('get["name"]');
+ bt(
+ 'a = {\n' +
+ ' set b(x) {},\n' +
+ ' c: 1,\n' +
+ ' d: function() {}\n' +
+ '};');
+ bt(
+ 'a = {\n' +
+ ' get b() {\n' +
+ ' retun 0;\n' +
+ ' },\n' +
+ ' c: 1,\n' +
+ ' d: function() {}\n' +
+ '};');
+
+ // Issue 298 - do not under indent if/while/for condtionals experesions
+ bt(
+ '\'use strict\';\n' +
+ 'if ([].some(function() {\n' +
+ ' return false;\n' +
+ ' })) {\n' +
+ ' console.log("hello");\n' +
+ '}');
+
+ // Issue 298 - do not under indent if/while/for condtionals experesions
+ bt(
+ '\'use strict\';\n' +
+ 'if ([].some(function() {\n' +
+ ' return false;\n' +
+ ' })) {\n' +
+ ' console.log("hello");\n' +
+ '}');
+
+ // Issue 552 - Typescript? Okay... we didn't break it before, so try not to break it now.
+ bt(
+ 'class Test {\n' +
+ ' blah: string[];\n' +
+ ' foo(): number {\n' +
+ ' return 0;\n' +
+ ' }\n' +
+ ' bar(): number {\n' +
+ ' return 0;\n' +
+ ' }\n' +
+ '}');
+ bt(
+ 'interface Test {\n' +
+ ' blah: string[];\n' +
+ ' foo(): number {\n' +
+ ' return 0;\n' +
+ ' }\n' +
+ ' bar(): number {\n' +
+ ' return 0;\n' +
+ ' }\n' +
+ '}');
+
+ // Issue 583 - Functions with comments after them should still indent correctly.
+ bt(
+ 'function exit(code) {\n' +
+ ' setTimeout(function() {\n' +
+ ' phantom.exit(code);\n' +
+ ' }, 0);\n' +
+ ' phantom.onError = function() {};\n' +
+ '}\n' +
+ '// Comment');
+
+ // Issue 806 - newline arrow functions
+ bt(
+ 'a.b("c",\n' +
+ ' () => d.e\n' +
+ ')');
+
+ // Issue 810 - es6 object literal detection
+ bt(
+ 'function badFormatting() {\n' +
+ ' return {\n' +
+ ' a,\n' +
+ ' b: c,\n' +
+ ' d: e,\n' +
+ ' f: g,\n' +
+ ' h,\n' +
+ ' i,\n' +
+ ' j: k\n' +
+ ' }\n' +
+ '}\n' +
+ '\n' +
+ 'function goodFormatting() {\n' +
+ ' return {\n' +
+ ' a: b,\n' +
+ ' c,\n' +
+ ' d: e,\n' +
+ ' f: g,\n' +
+ ' h,\n' +
+ ' i,\n' +
+ ' j: k\n' +
+ ' }\n' +
+ '}');
+
+ // Issue 602 - ES6 object literal shorthand functions
+ bt(
+ 'return {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'throw {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'foo({\n' +
+ ' fn1(a) {}\n' +
+ ' fn2(a) {}\n' +
+ '})');
+ bt(
+ 'foo("text", {\n' +
+ ' fn1(a) {}\n' +
+ ' fn2(a) {}\n' +
+ '})');
+ bt(
+ 'oneArg = {\n' +
+ ' fn1(a) {\n' +
+ ' do();\n' +
+ ' },\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'multiArg = {\n' +
+ ' fn1(a, b, c) {\n' +
+ ' do();\n' +
+ ' },\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'noArgs = {\n' +
+ ' fn1() {\n' +
+ ' do();\n' +
+ ' },\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'emptyFn = {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'nested = {\n' +
+ ' fns: {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {}\n' +
+ ' }\n' +
+ '}');
+ bt(
+ 'array = [{\n' +
+ ' fn1() {},\n' +
+ ' prop: val,\n' +
+ ' fn2() {}\n' +
+ '}]');
+ bt(
+ 'expr = expr ? expr : {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {}\n' +
+ '}');
+ bt(
+ 'strange = valid + {\n' +
+ ' fn1() {},\n' +
+ ' fn2() {\n' +
+ ' return 1;\n' +
+ ' }\n' +
+ '}.fn2()');
+
+ // Issue 854 - Arrow function with statement block
+ bt(
+ 'test(() => {\n' +
+ ' var a = {}\n' +
+ '\n' +
+ ' a.what = () => true ? 1 : 2\n' +
+ '\n' +
+ ' a.thing = () => {\n' +
+ ' b();\n' +
+ ' }\n' +
+ '})');
+
+ // Issue 406 - Multiline array
+ bt(
+ 'var tempName = [\n' +
+ ' "temp",\n' +
+ ' process.pid,\n' +
+ ' (Math.random() * 0x1000000000).toString(36),\n' +
+ ' new Date().getTime()\n' +
+ '].join("-");');
+
+ // Issue #996 - Input ends with backslash throws exception
+ test_fragment(
+ 'sd = 1;\n' +
+ '/');
+
+ // Issue #1079 - unbraced if with comments should still look right
+ bt(
+ 'if (console.log)\n' +
+ ' for (var i = 0; i < 20; ++i)\n' +
+ ' if (i % 3)\n' +
+ ' console.log(i);\n' +
+ '// all done\n' +
+ 'console.log("done");');
+
+ // Issue #1085 - function should not have blank line in a number of cases
+ bt(
+ 'var transformer =\n' +
+ ' options.transformer ||\n' +
+ ' globalSettings.transformer ||\n' +
+ ' function(x) {\n' +
+ ' return x;\n' +
+ ' };');
+
+ // Issue #569 - function should not have blank line in a number of cases
+ bt(
+ '(function(global) {\n' +
+ ' "use strict";\n' +
+ '\n' +
+ ' /* jshint ignore:start */\n' +
+ ' include "somefile.js"\n' +
+ ' /* jshint ignore:end */\n' +
+ '}(this));');
+ bt(
+ 'function bindAuthEvent(eventName) {\n' +
+ ' self.auth.on(eventName, function(event, meta) {\n' +
+ ' self.emit(eventName, event, meta);\n' +
+ ' });\n' +
+ '}\n' +
+ '["logged_in", "logged_out", "signed_up", "updated_user"].forEach(bindAuthEvent);\n' +
+ '\n' +
+ 'function bindBrowserEvent(eventName) {\n' +
+ ' browser.on(eventName, function(event, meta) {\n' +
+ ' self.emit(eventName, event, meta);\n' +
+ ' });\n' +
+ '}\n' +
+ '["navigating"].forEach(bindBrowserEvent);');
+
+ // Issue #892 - new line between chained methods
+ bt(
+ 'foo\n' +
+ ' .who()\n' +
+ '\n' +
+ ' .knows()\n' +
+ ' // comment\n' +
+ ' .nothing() // comment\n' +
+ '\n' +
+ ' .more()');
+
+
+ //============================================================
+ // Test non-positionable-ops
+ reset_options();
+ bt('a += 2;');
+ bt('a -= 2;');
+ bt('a *= 2;');
+ bt('a /= 2;');
+ bt('a %= 2;');
+ bt('a &= 2;');
+ bt('a ^= 2;');
+ bt('a |= 2;');
+ bt('a **= 2;');
+ bt('a <<= 2;');
+ bt('a >>= 2;');
+
+
+ //============================================================
+ // brace_style ,preserve-inline tests - (obo = " ", obot = "", oao = "\n", oaot = " ", obc = "\n", oac = " ", oact = "")
+ reset_options();
+ opts.brace_style = 'collapse,preserve-inline';
+ bt('import { asdf } from "asdf";');
+ bt('import { get } from "asdf";');
+ bt('function inLine() { console.log("oh em gee"); }');
+ bt('if (cancer) { console.log("Im sorry but you only have so long to live..."); }');
+ bt('if (ding) { console.log("dong"); } else { console.log("dang"); }');
+ bt(
+ 'function kindaComplex() {\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}');
+ bt(
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}');
+
+ // brace_style ,preserve-inline tests - (obo = "\n", obot = " ", oao = "\n", oaot = " ", obc = "\n", oac = "\n", oact = " ")
+ reset_options();
+ opts.brace_style = 'expand,preserve-inline';
+ bt('import { asdf } from "asdf";');
+ bt('import { get } from "asdf";');
+ bt('function inLine() { console.log("oh em gee"); }');
+ bt('if (cancer) { console.log("Im sorry but you only have so long to live..."); }');
+ bt(
+ 'if (ding) { console.log("dong"); } else { console.log("dang"); }',
+ // -- output --
+ 'if (ding) { console.log("dong"); }\n' +
+ 'else { console.log("dang"); }');
+ bt(
+ 'function kindaComplex() {\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function kindaComplex()\n' +
+ '{\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}');
+ bt(
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function complex()\n' +
+ '{\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b()\n' +
+ ' {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}');
+
+ // brace_style ,preserve-inline tests - (obo = " ", obot = "", oao = "\n", oaot = " ", obc = "\n", oac = "\n", oact = " ")
+ reset_options();
+ opts.brace_style = 'end-expand,preserve-inline';
+ bt('import { asdf } from "asdf";');
+ bt('import { get } from "asdf";');
+ bt('function inLine() { console.log("oh em gee"); }');
+ bt('if (cancer) { console.log("Im sorry but you only have so long to live..."); }');
+ bt(
+ 'if (ding) { console.log("dong"); } else { console.log("dang"); }',
+ // -- output --
+ 'if (ding) { console.log("dong"); }\n' +
+ 'else { console.log("dang"); }');
+ bt(
+ 'function kindaComplex() {\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}');
+ bt(
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}');
+
+ // brace_style ,preserve-inline tests - (obo = " ", obot = "", oao = "\n", oaot = " ", obc = "\n", oac = " ", oact = "")
+ reset_options();
+ opts.brace_style = 'none,preserve-inline';
+ bt('import { asdf } from "asdf";');
+ bt('import { get } from "asdf";');
+ bt('function inLine() { console.log("oh em gee"); }');
+ bt('if (cancer) { console.log("Im sorry but you only have so long to live..."); }');
+ bt('if (ding) { console.log("dong"); } else { console.log("dang"); }');
+ bt(
+ 'function kindaComplex() {\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}');
+ bt(
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}');
+
+ // brace_style ,preserve-inline tests - (obo = " ", obot = "", oao = "\n", oaot = " ", obc = "\n", oac = " ", oact = "")
+ reset_options();
+ opts.brace_style = 'collapse-preserve-inline';
+ bt('import { asdf } from "asdf";');
+ bt('import { get } from "asdf";');
+ bt('function inLine() { console.log("oh em gee"); }');
+ bt('if (cancer) { console.log("Im sorry but you only have so long to live..."); }');
+ bt('if (ding) { console.log("dong"); } else { console.log("dang"); }');
+ bt(
+ 'function kindaComplex() {\n' +
+ ' var a = 2;\n' +
+ ' var obj = {};\n' +
+ ' var obj2 = { a: "a", b: "b" };\n' +
+ ' var obj3 = {\n' +
+ ' c: "c",\n' +
+ ' d: "d",\n' +
+ ' e: "e"\n' +
+ ' };\n' +
+ '}');
+ bt(
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}',
+ // -- output --
+ 'function complex() {\n' +
+ ' console.log("wowe");\n' +
+ ' (function() { var a = 2; var b = 3; })();\n' +
+ ' $.each(arr, function(el, idx) { return el; });\n' +
+ ' var obj = {\n' +
+ ' a: function() { console.log("test"); },\n' +
+ ' b() {\n' +
+ ' console.log("test2");\n' +
+ ' }\n' +
+ ' };\n' +
+ '}');
+
+
+ //============================================================
+ // Destructured and related
+ reset_options();
+ opts.brace_style = 'collapse,preserve-inline';
+
+ // Issue 382 - import destructured
+ bt(
+ 'module "Even" {\n' +
+ ' import { odd, oddly } from "Odd";\n' +
+ '}');
+ bt(
+ 'import defaultMember from "module-name";\n' +
+ 'import * as name from "module-name";\n' +
+ 'import { member } from "module-name";\n' +
+ 'import { member as alias } from "module-name";\n' +
+ 'import { member1, member2 } from "module-name";\n' +
+ 'import { member1, member2 as alias2 } from "module-name";\n' +
+ 'import defaultMember, { member, member2 } from "module-name";\n' +
+ 'import defaultMember, * as name from "module-name";\n' +
+ 'import "module-name";');
+
+ // Issue 858 - from is a keyword only after import
+ bt(
+ 'if (from < to) {\n' +
+ ' from++;\n' +
+ '} else {\n' +
+ ' from--;\n' +
+ '}');
+
+ // Issue 511 - destrutured
+ bt(
+ 'var { b, c } = require("../stores");\n' +
+ 'var { ProjectStore } = require("../stores");\n' +
+ '\n' +
+ 'function takeThing({ prop }) {\n' +
+ ' console.log("inner prop", prop)\n' +
+ '}');
+
+ // Issue 315 - Short objects
+ bt('var a = { b: { c: { d: e } } };');
+ bt(
+ 'var a = {\n' +
+ ' b: {\n' +
+ ' c: { d: e }\n' +
+ ' c3: { d: e }\n' +
+ ' },\n' +
+ ' b2: { c: { d: e } }\n' +
+ '};');
+
+ // Issue 370 - Short objects in array
+ bt(
+ 'var methods = [\n' +
+ ' { name: "to" },\n' +
+ ' { name: "step" },\n' +
+ ' { name: "move" },\n' +
+ ' { name: "min" },\n' +
+ ' { name: "max" }\n' +
+ '];');
+
+ // Issue 838 - Short objects in array
+ bt(
+ 'function(url, callback) {\n' +
+ ' var script = document.createElement("script")\n' +
+ ' if (true) script.onreadystatechange = function() {\n' +
+ ' foo();\n' +
+ ' }\n' +
+ ' else script.onload = callback;\n' +
+ '}');
+
+ // Issue 578 - Odd indenting after function
+ bt(
+ 'function bindAuthEvent(eventName) {\n' +
+ ' self.auth.on(eventName, function(event, meta) {\n' +
+ ' self.emit(eventName, event, meta);\n' +
+ ' });\n' +
+ '}\n' +
+ '["logged_in", "logged_out", "signed_up", "updated_user"].forEach(bindAuthEvent);');
+
+ // Issue #487 - some short expressions examples
+ bt(
+ 'if (a == 1) { a++; }\n' +
+ 'a = { a: a };\n' +
+ 'UserDB.findOne({ username: "xyz" }, function(err, user) {});\n' +
+ 'import { fs } from "fs";');
+
+ // Issue #982 - Fixed return expression collapse-preserve-inline
+ bt(
+ 'function foo(arg) {\n' +
+ ' if (!arg) { a(); }\n' +
+ ' if (!arg) { return false; }\n' +
+ ' if (!arg) { throw "inline"; }\n' +
+ ' return true;\n' +
+ '}');
+
+ // Issue #338 - Short expressions
+ bt(
+ 'if (someCondition) { return something; }\n' +
+ 'if (someCondition) {\n' +
+ ' return something;\n' +
+ '}\n' +
+ 'if (someCondition) { break; }\n' +
+ 'if (someCondition) {\n' +
+ ' return something;\n' +
+ '}');
+
+
+ //============================================================
+ // Old tests
+ reset_options();
+ bt('');
+ test_fragment(' return .5');
+ test_fragment(
+ ' return .5;\n' +
+ ' a();');
+ test_fragment(
+ ' return .5;\n' +
+ ' a();');
+ test_fragment(
+ ' return .5;\n' +
+ ' a();');
+ test_fragment(' < div');
+ bt('a = 1', 'a = 1');
+ bt('a=1', 'a = 1');
+ bt('(3) / 2');
+ bt('["a", "b"].join("")');
+ bt(
+ 'a();\n' +
+ '\n' +
+ 'b();');
+ bt(
+ 'var a = 1 var b = 2',
+ // -- output --
+ 'var a = 1\n' +
+ 'var b = 2');
+ bt(
+ 'var a=1, b=c[d], e=6;',
+ // -- output --
+ 'var a = 1,\n' +
+ ' b = c[d],\n' +
+ ' e = 6;');
+ bt(
+ 'var a,\n' +
+ ' b,\n' +
+ ' c;');
+ bt(
+ 'let a = 1 let b = 2',
+ // -- output --
+ 'let a = 1\n' +
+ 'let b = 2');
+ bt(
+ 'let a=1, b=c[d], e=6;',
+ // -- output --
+ 'let a = 1,\n' +
+ ' b = c[d],\n' +
+ ' e = 6;');
+ bt(
+ 'let a,\n' +
+ ' b,\n' +
+ ' c;');
+ bt(
+ 'const a = 1 const b = 2',
+ // -- output --
+ 'const a = 1\n' +
+ 'const b = 2');
+ bt(
+ 'const a=1, b=c[d], e=6;',
+ // -- output --
+ 'const a = 1,\n' +
+ ' b = c[d],\n' +
+ ' e = 6;');
+ bt(
+ 'const a,\n' +
+ ' b,\n' +
+ ' c;');
+ bt('a = " 12345 "');
+ bt('a = \' 12345 \'');
+ bt('if (a == 1) b = 2;');
+ bt(
+ 'if(1){2}else{3}',
+ // -- output --
+ 'if (1) {\n' +
+ ' 2\n' +
+ '} else {\n' +
+ ' 3\n' +
+ '}');
+ bt('if(1||2);', 'if (1 || 2);');
+ bt('(a==1)||(b==2)', '(a == 1) || (b == 2)');
+ bt(
+ 'var a = 1 if (2) 3;',
+ // -- output --
+ 'var a = 1\n' +
+ 'if (2) 3;');
+ bt('a = a + 1');
+ bt('a = a == 1');
+ bt('/12345[^678]*9+/.match(a)');
+ bt('a /= 5');
+ bt('a = 0.5 * 3');
+ bt('a *= 10.55');
+ bt('a < .5');
+ bt('a <= .5');
+ bt('a<.5', 'a < .5');
+ bt('a<=.5', 'a <= .5');
+
+ // exponent literals
+ bt('a = 1e10');
+ bt('a = 1.3e10');
+ bt('a = 1.3e-10');
+ bt('a = -12345.3e-10');
+ bt('a = .12345e-10');
+ bt('a = 06789e-10');
+ bt('a = e - 10');
+ bt('a = 1.3e+10');
+ bt('a = 1.e-7');
+ bt('a = -12345.3e+10');
+ bt('a = .12345e+10');
+ bt('a = 06789e+10');
+ bt('a = e + 10');
+ bt('a=0e-12345.3e-10', 'a = 0e-12345 .3e-10');
+ bt('a=0.e-12345.3e-10', 'a = 0.e-12345 .3e-10');
+ bt('a=0x.e-12345.3e-10', 'a = 0x.e - 12345.3e-10');
+ bt('a=0x0.e-12345.3e-10', 'a = 0x0.e - 12345.3e-10');
+ bt('a=0x0.0e-12345.3e-10', 'a = 0x0 .0e-12345 .3e-10');
+ bt('a=0g-12345.3e-10', 'a = 0 g - 12345.3e-10');
+ bt('a=0.g-12345.3e-10', 'a = 0. g - 12345.3e-10');
+ bt('a=0x.g-12345.3e-10', 'a = 0x.g - 12345.3e-10');
+ bt('a=0x0.g-12345.3e-10', 'a = 0x0.g - 12345.3e-10');
+ bt('a=0x0.0g-12345.3e-10', 'a = 0x0 .0 g - 12345.3e-10');
+
+ // Decimal literals
+ bt('a = 0123456789;');
+ bt('a = 9876543210;');
+ bt('a = 5647308291;');
+ bt('a=030e-5', 'a = 030e-5');
+ bt('a=00+4', 'a = 00 + 4');
+ bt('a=32+4', 'a = 32 + 4');
+ bt('a=0.6g+4', 'a = 0.6 g + 4');
+ bt('a=01.10', 'a = 01.10');
+ bt('a=a.10', 'a = a .10');
+ bt('a=00B0x0', 'a = 00 B0x0');
+ bt('a=00B0xb0', 'a = 00 B0xb0');
+ bt('a=00B0x0b0', 'a = 00 B0x0b0');
+ bt('a=0090x0', 'a = 0090 x0');
+ bt('a=0g0b0o0', 'a = 0 g0b0o0');
+
+ // Hexadecimal literals
+ bt('a = 0x0123456789abcdef;');
+ bt('a = 0X0123456789ABCDEF;');
+ bt('a = 0xFeDcBa9876543210;');
+ bt('a=0x30e-5', 'a = 0x30e - 5');
+ bt('a=0xF0+4', 'a = 0xF0 + 4');
+ bt('a=0Xff+4', 'a = 0Xff + 4');
+ bt('a=0Xffg+4', 'a = 0Xff g + 4');
+ bt('a=0x01.10', 'a = 0x01 .10');
+ bt('a = 0xb0ce;');
+ bt('a = 0x0b0;');
+ bt('a=0x0B0x0', 'a = 0x0B0 x0');
+ bt('a=0x0B0xb0', 'a = 0x0B0 xb0');
+ bt('a=0x0B0x0b0', 'a = 0x0B0 x0b0');
+ bt('a=0X090x0', 'a = 0X090 x0');
+ bt('a=0Xg0b0o0', 'a = 0X g0b0o0');
+
+ // Octal literals
+ bt('a = 0o01234567;');
+ bt('a = 0O01234567;');
+ bt('a = 0o34120675;');
+ bt('a=0o30e-5', 'a = 0o30 e - 5');
+ bt('a=0o70+4', 'a = 0o70 + 4');
+ bt('a=0O77+4', 'a = 0O77 + 4');
+ bt('a=0O778+4', 'a = 0O77 8 + 4');
+ bt('a=0O77a+4', 'a = 0O77 a + 4');
+ bt('a=0o01.10', 'a = 0o01 .10');
+ bt('a=0o0B0x0', 'a = 0o0 B0x0');
+ bt('a=0o0B0xb0', 'a = 0o0 B0xb0');
+ bt('a=0o0B0x0b0', 'a = 0o0 B0x0b0');
+ bt('a=0O090x0', 'a = 0O0 90 x0');
+ bt('a=0Og0b0o0', 'a = 0O g0b0o0');
+
+ // Binary literals
+ bt('a = 0b010011;');
+ bt('a = 0B010011;');
+ bt('a = 0b01001100001111;');
+ bt('a=0b10e-5', 'a = 0b10 e - 5');
+ bt('a=0b10+4', 'a = 0b10 + 4');
+ bt('a=0B11+4', 'a = 0B11 + 4');
+ bt('a=0B112+4', 'a = 0B11 2 + 4');
+ bt('a=0B11a+4', 'a = 0B11 a + 4');
+ bt('a=0b01.10', 'a = 0b01 .10');
+ bt('a=0b0B0x0', 'a = 0b0 B0x0');
+ bt('a=0b0B0xb0', 'a = 0b0 B0xb0');
+ bt('a=0b0B0x0b0', 'a = 0b0 B0x0b0');
+ bt('a=0B090x0', 'a = 0B0 90 x0');
+ bt('a=0Bg0b0o0', 'a = 0B g0b0o0');
+ bt('a = [1, 2, 3, 4]');
+ bt('F*(g/=f)*g+b', 'F * (g /= f) * g + b');
+ bt(
+ 'a.b({c:d})',
+ // -- output --
+ 'a.b({\n' +
+ ' c: d\n' +
+ '})');
+ bt(
+ 'a.b\n' +
+ '(\n' +
+ '{\n' +
+ 'c:\n' +
+ 'd\n' +
+ '}\n' +
+ ')',
+ // -- output --
+ 'a.b({\n' +
+ ' c: d\n' +
+ '})');
+ bt(
+ 'a.b({c:"d"})',
+ // -- output --
+ 'a.b({\n' +
+ ' c: "d"\n' +
+ '})');
+ bt(
+ 'a.b\n' +
+ '(\n' +
+ '{\n' +
+ 'c:\n' +
+ '"d"\n' +
+ '}\n' +
+ ')',
+ // -- output --
+ 'a.b({\n' +
+ ' c: "d"\n' +
+ '})');
+ bt('a=!b', 'a = !b');
+ bt('a=!!b', 'a = !!b');
+ bt('a?b:c', 'a ? b : c');
+ bt('a?1:2', 'a ? 1 : 2');
+ bt('a?(b):c', 'a ? (b) : c');
+ bt(
+ 'x={a:1,b:w=="foo"?x:y,c:z}',
+ // -- output --
+ 'x = {\n' +
+ ' a: 1,\n' +
+ ' b: w == "foo" ? x : y,\n' +
+ ' c: z\n' +
+ '}');
+ bt('x=a?b?c?d:e:f:g;', 'x = a ? b ? c ? d : e : f : g;');
+ bt(
+ 'x=a?b?c?d:{e1:1,e2:2}:f:g;',
+ // -- output --
+ 'x = a ? b ? c ? d : {\n' +
+ ' e1: 1,\n' +
+ ' e2: 2\n' +
+ '} : f : g;');
+ bt('function void(void) {}');
+ bt('if(!a)foo();', 'if (!a) foo();');
+ bt('a=~a', 'a = ~a');
+ bt(
+ 'a;/*comment*/b;',
+ // -- output --
+ 'a; /*comment*/\n' +
+ 'b;');
+ bt(
+ 'a;/* comment */b;',
+ // -- output --
+ 'a; /* comment */\n' +
+ 'b;');
+
+ // simple comments don't get touched at all
+ test_fragment(
+ 'a;/*\n' +
+ 'comment\n' +
+ '*/b;',
+ // -- output --
+ 'a;\n' +
+ '/*\n' +
+ 'comment\n' +
+ '*/\n' +
+ 'b;');
+ bt(
+ 'a;/**\n' +
+ '* javadoc\n' +
+ '*/b;',
+ // -- output --
+ 'a;\n' +
+ '/**\n' +
+ ' * javadoc\n' +
+ ' */\n' +
+ 'b;');
+ test_fragment(
+ 'a;/**\n' +
+ '\n' +
+ 'no javadoc\n' +
+ '*/b;',
+ // -- output --
+ 'a;\n' +
+ '/**\n' +
+ '\n' +
+ 'no javadoc\n' +
+ '*/\n' +
+ 'b;');
+
+ // comment blocks detected and reindented even w/o javadoc starter
+ bt(
+ 'a;/*\n' +
+ '* javadoc\n' +
+ '*/b;',
+ // -- output --
+ 'a;\n' +
+ '/*\n' +
+ ' * javadoc\n' +
+ ' */\n' +
+ 'b;');
+ bt('if(a)break;', 'if (a) break;');
+ bt(
+ 'if(a){break}',
+ // -- output --
+ 'if (a) {\n' +
+ ' break\n' +
+ '}');
+ bt('if((a))foo();', 'if ((a)) foo();');
+ bt('for(var i=0;;) a', 'for (var i = 0;;) a');
+ bt(
+ 'for(var i=0;;)\n' +
+ 'a',
+ // -- output --
+ 'for (var i = 0;;)\n' +
+ ' a');
+ bt('a++;');
+ bt('for(;;i++)a()', 'for (;; i++) a()');
+ bt(
+ 'for(;;i++)\n' +
+ 'a()',
+ // -- output --
+ 'for (;; i++)\n' +
+ ' a()');
+ bt('for(;;++i)a', 'for (;; ++i) a');
+ bt('return(1)', 'return (1)');
+ bt(
+ 'try{a();}catch(b){c();}finally{d();}',
+ // -- output --
+ 'try {\n' +
+ ' a();\n' +
+ '} catch (b) {\n' +
+ ' c();\n' +
+ '} finally {\n' +
+ ' d();\n' +
+ '}');
+
+ // magic function call
+ bt('(xx)()');
+
+ // another magic function call
+ bt('a[1]()');
+ bt(
+ 'if(a){b();}else if(c) foo();',
+ // -- output --
+ 'if (a) {\n' +
+ ' b();\n' +
+ '} else if (c) foo();');
+ bt(
+ 'switch(x) {case 0: case 1: a(); break; default: break}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case 0:\n' +
+ ' case 1:\n' +
+ ' a();\n' +
+ ' break;\n' +
+ ' default:\n' +
+ ' break\n' +
+ '}');
+ bt(
+ 'switch(x){case -1:break;case !y:break;}',
+ // -- output --
+ 'switch (x) {\n' +
+ ' case -1:\n' +
+ ' break;\n' +
+ ' case !y:\n' +
+ ' break;\n' +
+ '}');
+ bt('a !== b');
+ bt(
+ 'if (a) b(); else c();',
+ // -- output --
+ 'if (a) b();\n' +
+ 'else c();');
+
+ // typical greasemonkey start
+ bt(
+ '// comment\n' +
+ '(function something() {})');
+
+ // duplicating newlines
+ bt(
+ '{\n' +
+ '\n' +
+ ' x();\n' +
+ '\n' +
+ '}');
+ bt('if (a in b) foo();');
+ bt('if (a of b) foo();');
+ bt('if (a of [1, 2, 3]) foo();');
+ bt(
+ 'if(X)if(Y)a();else b();else c();',
+ // -- output --
+ 'if (X)\n' +
+ ' if (Y) a();\n' +
+ ' else b();\n' +
+ 'else c();');
+ bt(
+ 'if (foo) bar();\n' +
+ 'else break');
+ bt('var a, b;');
+ bt('var a = new function();');
+ test_fragment('new function');
+ bt('var a, b');
+ bt(
+ '{a:1, b:2}',
+ // -- output --
+ '{\n' +
+ ' a: 1,\n' +
+ ' b: 2\n' +
+ '}');
+ bt(
+ 'a={1:[-1],2:[+1]}',
+ // -- output --
+ 'a = {\n' +
+ ' 1: [-1],\n' +
+ ' 2: [+1]\n' +
+ '}');
+ bt(
+ 'var l = {\'a\':\'1\', \'b\':\'2\'}',
+ // -- output --
+ 'var l = {\n' +
+ ' \'a\': \'1\',\n' +
+ ' \'b\': \'2\'\n' +
+ '}');
+ bt('if (template.user[n] in bk) foo();');
+ bt('return 45');
+ bt(
+ 'return this.prevObject ||\n' +
+ '\n' +
+ ' this.constructor(null);');
+ bt('If[1]');
+ bt('Then[1]');
+ bt('a = 1;// comment', 'a = 1; // comment');
+ bt('a = 1; // comment');
+ bt(
+ 'a = 1;\n' +
+ ' // comment',
+ // -- output --
+ 'a = 1;\n' +
+ '// comment');
+ bt('a = [-1, -1, -1]');
+ bt(
+ '// a\n' +
+ '// b\n' +
+ '\n' +
+ '\n' +
+ '\n' +
+ '// c\n' +
+ '// d');
+ bt(
+ '// func-comment\n' +
+ '\n' +
+ 'function foo() {}\n' +
+ '\n' +
+ '// end-func-comment');
+
+ // The exact formatting these should have is open for discussion, but they are at least reasonable
+ bt(
+ 'a = [ // comment\n' +
+ ' -1, -1, -1\n' +
+ ']');
+ bt(
+ 'var a = [ // comment\n' +
+ ' -1, -1, -1\n' +
+ ']');
+ bt(
+ 'a = [ // comment\n' +
+ ' -1, // comment\n' +
+ ' -1, -1\n' +
+ ']');
+ bt(
+ 'var a = [ // comment\n' +
+ ' -1, // comment\n' +
+ ' -1, -1\n' +
+ ']');
+ bt(
+ 'o = [{a:b},{c:d}]',
+ // -- output --
+ 'o = [{\n' +
+ ' a: b\n' +
+ '}, {\n' +
+ ' c: d\n' +
+ '}]');
+
+ // was: extra space appended
+ bt(
+ 'if (a) {\n' +
+ ' do();\n' +
+ '}');
+
+ // if/else statement with empty body
+ bt(
+ 'if (a) {\n' +
+ '// comment\n' +
+ '}else{\n' +
+ '// comment\n' +
+ '}',
+ // -- output --
+ 'if (a) {\n' +
+ ' // comment\n' +
+ '} else {\n' +
+ ' // comment\n' +
+ '}');
+
+ // multiple comments indentation
+ bt(
+ 'if (a) {\n' +
+ '// comment\n' +
+ '// comment\n' +
+ '}',
+ // -- output --
+ 'if (a) {\n' +
+ ' // comment\n' +
+ ' // comment\n' +
+ '}');
+ bt(
+ 'if (a) b() else c();',
+ // -- output --
+ 'if (a) b()\n' +
+ 'else c();');
+ bt(
+ 'if (a) b() else if c() d();',
+ // -- output --
+ 'if (a) b()\n' +
+ 'else if c() d();');
+ bt('{}');
+ bt(
+ '{\n' +
+ '\n' +
+ '}');
+ bt(
+ 'do { a(); } while ( 1 );',
+ // -- output --
+ 'do {\n' +
+ ' a();\n' +
+ '} while (1);');
+ bt('do {} while (1);');
+ bt(
+ 'do {\n' +
+ '} while (1);',
+ // -- output --
+ 'do {} while (1);');
+ bt(
+ 'do {\n' +
+ '\n' +
+ '} while (1);');
+ bt('var a = x(a, b, c)');
+ bt(
+ 'delete x if (a) b();',
+ // -- output --
+ 'delete x\n' +
+ 'if (a) b();');
+ bt(
+ 'delete x[x] if (a) b();',
+ // -- output --
+ 'delete x[x]\n' +
+ 'if (a) b();');
+ bt('for(var a=1,b=2)d', 'for (var a = 1, b = 2) d');
+ bt('for(var a=1,b=2,c=3) d', 'for (var a = 1, b = 2, c = 3) d');
+ bt(
+ 'for(var a=1,b=2,c=3;d<3;d++)\n' +
+ 'e',
+ // -- output --
+ 'for (var a = 1, b = 2, c = 3; d < 3; d++)\n' +
+ ' e');
+ bt(
+ 'function x(){(a||b).c()}',
+ // -- output --
+ 'function x() {\n' +
+ ' (a || b).c()\n' +
+ '}');
+ bt(
+ 'function x(){return - 1}',
+ // -- output --
+ 'function x() {\n' +
+ ' return -1\n' +
+ '}');
+ bt(
+ 'function x(){return ! a}',
+ // -- output --
+ 'function x() {\n' +
+ ' return !a\n' +
+ '}');
+ bt('x => x');
+ bt('(x) => x');
+ bt(
+ 'x => { x }',
+ // -- output --
+ 'x => {\n' +
+ ' x\n' +
+ '}');
+ bt(
+ '(x) => { x }',
+ // -- output --
+ '(x) => {\n' +
+ ' x\n' +
+ '}');
+
+ // a common snippet in jQuery plugins
+ bt(
+ 'settings = $.extend({},defaults,settings);',
+ // -- output --
+ 'settings = $.extend({}, defaults, settings);');
+ bt('$http().then().finally().default()');
+ bt(
+ '$http()\n' +
+ '.then()\n' +
+ '.finally()\n' +
+ '.default()',
+ // -- output --
+ '$http()\n' +
+ ' .then()\n' +
+ ' .finally()\n' +
+ ' .default()');
+ bt('$http().when.in.new.catch().throw()');
+ bt(
+ '$http()\n' +
+ '.when\n' +
+ '.in\n' +
+ '.new\n' +
+ '.catch()\n' +
+ '.throw()',
+ // -- output --
+ '$http()\n' +
+ ' .when\n' +
+ ' .in\n' +
+ ' .new\n' +
+ ' .catch()\n' +
+ ' .throw()');
+ bt(
+ '{xxx;}()',
+ // -- output --
+ '{\n' +
+ ' xxx;\n' +
+ '}()');
+ bt(
+ 'a = \'a\'\n' +
+ 'b = \'b\'');
+ bt('a = /reg/exp');
+ bt('a = /reg/');
+ bt('/abc/.test()');
+ bt('/abc/i.test()');
+ bt(
+ '{/abc/i.test()}',
+ // -- output --
+ '{\n' +
+ ' /abc/i.test()\n' +
+ '}');
+ bt('var x=(a)/a;', 'var x = (a) / a;');
+ bt('x != -1');
+ bt('for (; s-->0;)t', 'for (; s-- > 0;) t');
+ bt('for (; s++>0;)u', 'for (; s++ > 0;) u');
+ bt('a = s++>s--;', 'a = s++ > s--;');
+ bt('a = s++>--s;', 'a = s++ > --s;');
+ bt(
+ '{x=#1=[]}',
+ // -- output --
+ '{\n' +
+ ' x = #1=[]\n' +
+ '}');
+ bt(
+ '{a:#1={}}',
+ // -- output --
+ '{\n' +
+ ' a: #1={}\n' +
+ '}');
+ bt(
+ '{a:#1#}',
+ // -- output --
+ '{\n' +
+ ' a: #1#\n' +
+ '}');
+ test_fragment('"incomplete-string');
+ test_fragment('\'incomplete-string');
+ test_fragment('/incomplete-regex');
+ test_fragment('`incomplete-template-string');
+ test_fragment(
+ '{a:1},{a:2}',
+ // -- output --
+ '{\n' +
+ ' a: 1\n' +
+ '}, {\n' +
+ ' a: 2\n' +
+ '}');
+ test_fragment(
+ 'var ary=[{a:1}, {a:2}];',
+ // -- output --
+ 'var ary = [{\n' +
+ ' a: 1\n' +
+ '}, {\n' +
+ ' a: 2\n' +
+ '}];');
+
+ // incomplete
+ test_fragment(
+ '{a:#1',
+ // -- output --
+ '{\n' +
+ ' a: #1');
+
+ // incomplete
+ test_fragment(
+ '{a:#',
+ // -- output --
+ '{\n' +
+ ' a: #');
+
+ // incomplete
+ test_fragment(
+ '}}}',
+ // -- output --
+ '}\n' +
+ '}\n' +
+ '}');
+ test_fragment(
+ '');
+
+ // incomplete regexp
+ test_fragment('a=/regexp', 'a = /regexp');
+ bt(
+ '{a:#1=[],b:#1#,c:#999999#}',
+ // -- output --
+ '{\n' +
+ ' a: #1=[],\n' +
+ ' b: #1#,\n' +
+ ' c: #999999#\n' +
+ '}');
+ bt(
+ 'do{x()}while(a>1)',
+ // -- output --
+ 'do {\n' +
+ ' x()\n' +
+ '} while (a > 1)');
+ bt(
+ 'x(); /reg/exp.match(something)',
+ // -- output --
+ 'x();\n' +
+ '/reg/exp.match(something)');
+ test_fragment(
+ 'something();(',
+ // -- output --
+ 'something();\n' +
+ '(');
+ test_fragment(
+ '#!she/bangs, she bangs\n' +
+ 'f=1',
+ // -- output --
+ '#!she/bangs, she bangs\n' +
+ '\n' +
+ 'f = 1');
+ test_fragment(
+ '#!she/bangs, she bangs\n' +
+ '\n' +
+ 'f=1',
+ // -- output --
+ '#!she/bangs, she bangs\n' +
+ '\n' +
+ 'f = 1');
+ test_fragment(
+ '#!she/bangs, she bangs\n' +
+ '\n' +
+ '/* comment */');
+ test_fragment(
+ '#!she/bangs, she bangs\n' +
+ '\n' +
+ '\n' +
+ '/* comment */');
+ test_fragment('#');
+ test_fragment('#!');
+ bt('function namespace::something()');
+ test_fragment(
+ '');
+ test_fragment(
+ '',
+ // -- output --
+ '');
+ bt(
+ '{foo();--bar;}',
+ // -- output --
+ '{\n' +
+ ' foo();\n' +
+ ' --bar;\n' +
+ '}');
+ bt(
+ '{foo();++bar;}',
+ // -- output --
+ '{\n' +
+ ' foo();\n' +
+ ' ++bar;\n' +
+ '}');
+ bt(
+ '{--bar;}',
+ // -- output --
+ '{\n' +
+ ' --bar;\n' +
+ '}');
+ bt(
+ '{++bar;}',
+ // -- output --
+ '{\n' +
+ ' ++bar;\n' +
+ '}');
+ bt('if(true)++a;', 'if (true) ++a;');
+ bt(
+ 'if(true)\n' +
+ '++a;',
+ // -- output --
+ 'if (true)\n' +
+ ' ++a;');
+ bt('if(true)--a;', 'if (true) --a;');
+ bt(
+ 'if(true)\n' +
+ '--a;',
+ // -- output --
+ 'if (true)\n' +
+ ' --a;');
+ bt('elem[array]++;');
+ bt('elem++ * elem[array]++;');
+ bt('elem-- * -elem[array]++;');
+ bt('elem-- + elem[array]++;');
+ bt('elem-- - elem[array]++;');
+ bt('elem-- - -elem[array]++;');
+ bt('elem-- - +elem[array]++;');
+
+ // Handling of newlines around unary ++ and -- operators
+ bt(
+ '{foo\n' +
+ '++bar;}',
+ // -- output --
+ '{\n' +
+ ' foo\n' +
+ ' ++bar;\n' +
+ '}');
+ bt(
+ '{foo++\n' +
+ 'bar;}',
+ // -- output --
+ '{\n' +
+ ' foo++\n' +
+ ' bar;\n' +
+ '}');
+
+ // This is invalid, but harder to guard against. Issue #203.
+ bt(
+ '{foo\n' +
+ '++\n' +
+ 'bar;}',
+ // -- output --
+ '{\n' +
+ ' foo\n' +
+ ' ++\n' +
+ ' bar;\n' +
+ '}');
+
+ // regexps
+ bt(
+ 'a(/abc\\/\\/def/);b()',
+ // -- output --
+ 'a(/abc\\/\\/def/);\n' +
+ 'b()');
+ bt(
+ 'a(/a[b\\[\\]c]d/);b()',
+ // -- output --
+ 'a(/a[b\\[\\]c]d/);\n' +
+ 'b()');
+
+ // incomplete char class
+ test_fragment('a(/a[b\\[');
+
+ // allow unescaped / in char classes
+ bt(
+ 'a(/[a/b]/);b()',
+ // -- output --
+ 'a(/[a/b]/);\n' +
+ 'b()');
+ bt('typeof /foo\\//;');
+ bt('throw /foo\\//;');
+ bt('do /foo\\//;');
+ bt('return /foo\\//;');
+ bt(
+ 'switch (a) {\n' +
+ ' case /foo\\//:\n' +
+ ' b\n' +
+ '}');
+ bt(
+ 'if (a) /foo\\//\n' +
+ 'else /foo\\//;');
+ bt('if (foo) /regex/.test();');
+ bt('for (index in [1, 2, 3]) /^test$/i.test(s)');
+ bt(
+ 'function foo() {\n' +
+ ' return [\n' +
+ ' "one",\n' +
+ ' "two"\n' +
+ ' ];\n' +
+ '}');
+ bt(
+ 'a=[[1,2],[4,5],[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt(
+ 'a=[[1,2],[4,5],function(){},[7,8]]',
+ // -- output --
+ 'a = [\n' +
+ ' [1, 2],\n' +
+ ' [4, 5],\n' +
+ ' function() {},\n' +
+ ' [7, 8]\n' +
+ ']');
+ bt('a=[b,c,function(){},function(){},d]', 'a = [b, c, function() {}, function() {}, d]');
+ bt(
+ 'a=[b,c,\n' +
+ 'function(){},function(){},d]',
+ // -- output --
+ 'a = [b, c,\n' +
+ ' function() {},\n' +
+ ' function() {},\n' +
+ ' d\n' +
+ ']');
+ bt('a=[a[1],b[4],c[d[7]]]', 'a = [a[1], b[4], c[d[7]]]');
+ bt('[1,2,[3,4,[5,6],7],8]', '[1, 2, [3, 4, [5, 6], 7], 8]');
+ bt(
+ '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+ // -- output --
+ '[\n' +
+ ' [\n' +
+ ' ["1", "2"],\n' +
+ ' ["3", "4"]\n' +
+ ' ],\n' +
+ ' [\n' +
+ ' ["5", "6", "7"],\n' +
+ ' ["8", "9", "0"]\n' +
+ ' ],\n' +
+ ' [\n' +
+ ' ["1", "2", "3"],\n' +
+ ' ["4", "5", "6", "7"],\n' +
+ ' ["8", "9", "0"]\n' +
+ ' ]\n' +
+ ']');
+ bt(
+ '{[x()[0]];indent;}',
+ // -- output --
+ '{\n' +
+ ' [x()[0]];\n' +
+ ' indent;\n' +
+ '}');
+ bt(
+ '/*\n' +
+ ' foo trailing space \n' +
+ ' * bar trailing space \n' +
+ '**/');
+ bt(
+ '{\n' +
+ ' /*\n' +
+ ' foo \n' +
+ ' * bar \n' +
+ ' */\n' +
+ '}');
+ bt('return ++i');
+ bt('return !!x');
+ bt('return !x');
+ bt('return [1,2]', 'return [1, 2]');
+ bt('return;');
+ bt(
+ 'return\n' +
+ 'func');
+ bt('catch(e)', 'catch (e)');
+ bt(
+ 'var a=1,b={foo:2,bar:3},{baz:4,wham:5},c=4;',
+ // -- output --
+ 'var a = 1,\n' +
+ ' b = {\n' +
+ ' foo: 2,\n' +
+ ' bar: 3\n' +
+ ' },\n' +
+ ' {\n' +
+ ' baz: 4,\n' +
+ ' wham: 5\n' +
+ ' }, c = 4;');
+ bt(
+ 'var a=1,b={foo:2,bar:3},{baz:4,wham:5},\n' +
+ 'c=4;',
+ // -- output --
+ 'var a = 1,\n' +
+ ' b = {\n' +
+ ' foo: 2,\n' +
+ ' bar: 3\n' +
+ ' },\n' +
+ ' {\n' +
+ ' baz: 4,\n' +
+ ' wham: 5\n' +
+ ' },\n' +
+ ' c = 4;');
+
+ // inline comment
+ bt(
+ 'function x(/*int*/ start, /*string*/ foo)',
+ // -- output --
+ 'function x( /*int*/ start, /*string*/ foo)');
+
+ // javadoc comment
+ bt(
+ '/**\n' +
+ '* foo\n' +
+ '*/',
+ // -- output --
+ '/**\n' +
+ ' * foo\n' +
+ ' */');
+ bt(
+ '{\n' +
+ '/**\n' +
+ '* foo\n' +
+ '*/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' * foo\n' +
+ ' */\n' +
+ '}');
+
+ // starless block comment
+ bt(
+ '/**\n' +
+ 'foo\n' +
+ '*/');
+ bt(
+ '/**\n' +
+ 'foo\n' +
+ '**/');
+ bt(
+ '/**\n' +
+ 'foo\n' +
+ 'bar\n' +
+ '**/');
+ bt(
+ '/**\n' +
+ 'foo\n' +
+ '\n' +
+ 'bar\n' +
+ '**/');
+ bt(
+ '/**\n' +
+ 'foo\n' +
+ ' bar\n' +
+ '**/');
+ bt(
+ '{\n' +
+ '/**\n' +
+ 'foo\n' +
+ '*/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ ' */\n' +
+ '}');
+ bt(
+ '{\n' +
+ '/**\n' +
+ 'foo\n' +
+ '**/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ ' **/\n' +
+ '}');
+ bt(
+ '{\n' +
+ '/**\n' +
+ 'foo\n' +
+ 'bar\n' +
+ '**/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ ' bar\n' +
+ ' **/\n' +
+ '}');
+ bt(
+ '{\n' +
+ '/**\n' +
+ 'foo\n' +
+ '\n' +
+ 'bar\n' +
+ '**/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ '\n' +
+ ' bar\n' +
+ ' **/\n' +
+ '}');
+ bt(
+ '{\n' +
+ '/**\n' +
+ 'foo\n' +
+ ' bar\n' +
+ '**/\n' +
+ '}',
+ // -- output --
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ ' bar\n' +
+ ' **/\n' +
+ '}');
+ bt(
+ '{\n' +
+ ' /**\n' +
+ ' foo\n' +
+ 'bar\n' +
+ ' **/\n' +
+ '}');
+ bt(
+ 'var a,b,c=1,d,e,f=2;',
+ // -- output --
+ 'var a, b, c = 1,\n' +
+ ' d, e, f = 2;');
+ bt(
+ 'var a,b,c=[],d,e,f=2;',
+ // -- output --
+ 'var a, b, c = [],\n' +
+ ' d, e, f = 2;');
+ bt(
+ 'function() {\n' +
+ ' var a, b, c, d, e = [],\n' +
+ ' f;\n' +
+ '}');
+ bt(
+ 'do/regexp/;\n' +
+ 'while(1);',
+ // -- output --
+ 'do /regexp/;\n' +
+ 'while (1);');
+ bt(
+ 'var a = a,\n' +
+ 'a;\n' +
+ 'b = {\n' +
+ 'b\n' +
+ '}',
+ // -- output --
+ 'var a = a,\n' +
+ ' a;\n' +
+ 'b = {\n' +
+ ' b\n' +
+ '}');
+ bt(
+ 'var a = a,\n' +
+ ' /* c */\n' +
+ ' b;');
+ bt(
+ 'var a = a,\n' +
+ ' // c\n' +
+ ' b;');
+
+ // weird element referencing
+ bt('foo.("bar");');
+ bt(
+ 'if (a) a()\n' +
+ 'else b()\n' +
+ 'newline()');
+ bt(
+ 'if (a) a()\n' +
+ 'newline()');
+ bt('a=typeof(x)', 'a = typeof(x)');
+ bt(
+ 'var a = function() {\n' +
+ ' return null;\n' +
+ ' },\n' +
+ ' b = false;');
+ bt(
+ 'var a = function() {\n' +
+ ' func1()\n' +
+ '}');
+ bt(
+ 'var a = function() {\n' +
+ ' func1()\n' +
+ '}\n' +
+ 'var b = function() {\n' +
+ ' func2()\n' +
+ '}');
+
+ // code with and without semicolons
+ bt(
+ 'var whatever = require("whatever");\n' +
+ 'function() {\n' +
+ ' a = 6;\n' +
+ '}',
+ // -- output --
+ 'var whatever = require("whatever");\n' +
+ '\n' +
+ 'function() {\n' +
+ ' a = 6;\n' +
+ '}');
+ bt(
+ 'var whatever = require("whatever")\n' +
+ 'function() {\n' +
+ ' a = 6\n' +
+ '}',
+ // -- output --
+ 'var whatever = require("whatever")\n' +
+ '\n' +
+ 'function() {\n' +
+ ' a = 6\n' +
+ '}');
+ bt(
+ '{"x":[{"a":1,"b":3},\n' +
+ '7,8,8,8,8,{"b":99},{"a":11}]}',
+ // -- output --
+ '{\n' +
+ ' "x": [{\n' +
+ ' "a": 1,\n' +
+ ' "b": 3\n' +
+ ' },\n' +
+ ' 7, 8, 8, 8, 8, {\n' +
+ ' "b": 99\n' +
+ ' }, {\n' +
+ ' "a": 11\n' +
+ ' }\n' +
+ ' ]\n' +
+ '}');
+ bt(
+ '{"x":[{"a":1,"b":3},7,8,8,8,8,{"b":99},{"a":11}]}',
+ // -- output --
+ '{\n' +
+ ' "x": [{\n' +
+ ' "a": 1,\n' +
+ ' "b": 3\n' +
+ ' }, 7, 8, 8, 8, 8, {\n' +
+ ' "b": 99\n' +
+ ' }, {\n' +
+ ' "a": 11\n' +
+ ' }]\n' +
+ '}');
+ bt(
+ '{"1":{"1a":"1b"},"2"}',
+ // -- output --
+ '{\n' +
+ ' "1": {\n' +
+ ' "1a": "1b"\n' +
+ ' },\n' +
+ ' "2"\n' +
+ '}');
+ bt(
+ '{a:{a:b},c}',
+ // -- output --
+ '{\n' +
+ ' a: {\n' +
+ ' a: b\n' +
+ ' },\n' +
+ ' c\n' +
+ '}');
+ bt(
+ '{[y[a]];keep_indent;}',
+ // -- output --
+ '{\n' +
+ ' [y[a]];\n' +
+ ' keep_indent;\n' +
+ '}');
+ bt(
+ 'if (x) {y} else { if (x) {y}}',
+ // -- output --
+ 'if (x) {\n' +
+ ' y\n' +
+ '} else {\n' +
+ ' if (x) {\n' +
+ ' y\n' +
+ ' }\n' +
+ '}');
+ bt(
+ 'if (foo) one()\n' +
+ 'two()\n' +
+ 'three()');
+ bt(
+ 'if (1 + foo() && bar(baz()) / 2) one()\n' +
+ 'two()\n' +
+ 'three()');
+ bt(
+ 'if (1 + foo() && bar(baz()) / 2) one();\n' +
+ 'two();\n' +
+ 'three();');
+ bt(
+ 'var a=1,b={bang:2},c=3;',
+ // -- output --
+ 'var a = 1,\n' +
+ ' b = {\n' +
+ ' bang: 2\n' +
+ ' },\n' +
+ ' c = 3;');
+ bt(
+ 'var a={bing:1},b=2,c=3;',
+ // -- output --
+ 'var a = {\n' +
+ ' bing: 1\n' +
+ ' },\n' +
+ ' b = 2,\n' +
+ ' c = 3;');
+
+
+ }
+
+ function beautifier_unconverted_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ opts.indent_size = 1;
+ opts.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}");
+
+ bt('var a,b=1,c=2', 'var a, b = 1,\n c = 2');
+
+ opts.indent_size = 4;
+ opts.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}");
+
+ opts.indent_size = 1;
+ opts.indent_char = "\t";
+ bt('{ one_char() }', "{\n\tone_char()\n}");
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;');
+
+ //set to something else than it should change to, but with tabs on, should override
+ opts.indent_size = 5;
+ opts.indent_char = ' ';
+ opts.indent_with_tabs = true;
+
+ bt('{ one_char() }', "{\n\tone_char()\n}");
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;');
+
+ opts.indent_size = 4;
+ opts.indent_char = ' ';
+ opts.indent_with_tabs = false;
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = false;
+
+ bt('var\na=dont_preserve_newlines;', 'var a = dont_preserve_newlines;');
+
+ // make sure the blank line between function definitions stays
+ // even when preserve_newlines = false
+ bt('function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}');
+ bt('function foo() {\n return 1;\n}\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ );
+ bt('function foo() {\n return 1;\n}\n\n\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ );
+
+ opts.preserve_newlines = true;
+ bt('var\na=do_preserve_newlines;', 'var\n a = do_preserve_newlines;');
+ bt('if (foo) // comment\n{\n bar();\n}');
+
+
+ reset_options();
+ //============================================================
+ opts.keep_array_indentation = false;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f'\n]");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]");
+ bt('var x = [{}\n]', 'var x = [{}]');
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n}]');
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);",
+ "a = ['something',\n 'completely',\n 'different'\n];\nif (x);");
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']");
+
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']");
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]");
+ bt('{a([[a1]], {b;});}',
+ '{\n a([\n [a1]\n ], {\n b;\n });\n}');
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n[\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();");
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();");
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}");
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}');
+ // 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}");
+ // 3 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}");
+
+ opts.keep_array_indentation = true;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']");
+ bt('var x = [{}\n]', 'var x = [{}\n]');
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n }\n]');
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);");
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']");
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']");
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]");
+ bt('{a([[a1]], {b;});}',
+ '{\n a([[a1]], {\n b;\n });\n}');
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();");
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();");
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}");
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}');
+ // 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}");
+ // 3 spaces per indent input, processed with 4-spaces per indent
+ // Should be unchanged, but is not - #445
+// bt( "function foo() {\n" +
+// " return [\n" +
+// " {\n" +
+// " one: 'x',\n" +
+// " two: [\n" +
+// " {\n" +
+// " id: 'a',\n" +
+// " name: 'apple'\n" +
+// " }, {\n" +
+// " id: 'b',\n" +
+// " name: 'banana'\n" +
+// " }\n" +
+// " ]\n" +
+// " }\n" +
+// " ];\n" +
+// "}");
+
+
+ reset_options();
+ //============================================================
+ bt('a = //comment\n /regex/;');
+
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}', 'if (a) {\n b;\n} else {\n c;\n}');
+
+ // tests for brace positioning
+ beautify_brace_tests('expand');
+ beautify_brace_tests('collapse');
+ beautify_brace_tests('end-expand');
+ beautify_brace_tests('none');
+
+ test_fragment('roo = {\n /*\n ****\n FOO\n ****\n */\n BAR: 0\n};');
+
+ bt('"foo""bar""baz"', '"foo"\n"bar"\n"baz"');
+ bt("'foo''bar''baz'", "'foo'\n'bar'\n'baz'");
+
+
+ test_fragment("if (zz) {\n // ....\n}\n(function");
+
+ bt("{\n get foo() {}\n}");
+ bt("{\n var a = get\n foo();\n}");
+ bt("{\n set foo() {}\n}");
+ bt("{\n var a = set\n foo();\n}");
+ bt("var x = {\n get function()\n}");
+ bt("var x = {\n set function()\n}");
+
+ // According to my current research get/set have no special meaning outside of an object literal
+ bt("var x = set\n\na() {}", "var x = set\n\na() {}");
+ bt("var x = set\n\nfunction() {}", "var x = set\n\nfunction() {}");
+
+ bt('');
+ bt('
+ bt('for () /abc/.test()');
+ bt('if (k) /aaa/m.test(v) && l();');
+ bt('switch (true) {\n case /swf/i.test(foo):\n bar();\n}');
+ bt('createdAt = {\n type: Date,\n default: Date.now\n}');
+ bt('switch (createdAt) {\n case a:\n Date,\n default:\n Date.now\n}');
+
+ reset_options();
+ //============================================================
+ opts.space_before_conditional = false;
+ bt('if(a) b()');
+
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = true;
+ bt('var a = 42; // foo\n\nvar b;');
+ bt('var a = 42; // foo\n\n\nvar b;');
+ bt("var a = 'foo' +\n 'bar';");
+ bt("var a = \"foo\" +\n \"bar\";");
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');');
+
+
+ reset_options();
+ //============================================================
+ opts.unescape_strings = false;
+ bt('"\\\\s"'); // == "\\s" in the js source
+ bt("'\\\\s'"); // == '\\s' in the js source
+ bt("'\\\\\\s'"); // == '\\\s' in the js source
+ bt("'\\s'"); // == '\s' in the js source
+ bt('"•"');
+ bt('"—"');
+ bt('"\\x41\\x42\\x43\\x01"', '"\\x41\\x42\\x43\\x01"');
+ bt('"\\u2022"', '"\\u2022"');
+ bt('a = /\s+/');
+ // bt('a = /\\x41/','a = /A/');
+ bt('"\\u2022";a = /\s+/;"\\x41\\x42\\x43\\x01".match(/\\x41/);','"\\u2022";\na = /\s+/;\n"\\x41\\x42\\x43\\x01".match(/\\x41/);');
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"', '"\\x22\\x27", \'\\x22\\x27\', "\\x5c", \'\\x5c\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"');
+
+ opts.unescape_strings = true;
+ test_fragment('"\\x20\\x40\\x4a"', '" @J"');
+ test_fragment('"\\xff\\x40\\x4a"');
+ test_fragment('"\\u0072\\u016B\\u0137\\u012B\\u0074\\u0069\\u0073"', '"\u0072\u016B\u0137\u012B\u0074\u0069\u0073"');
+ test_fragment('"Google Chrome est\\u00E1 actualizado."', '"Google Chrome está actualizado."');
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff and \\xzz", "unicode \\u0000 \\" \\\' \\\\ ' + unicode_char(0xffff) + '"');
+
+ // For error case, return the string unchanged
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"');
+
+ reset_options();
+ //============================================================
+ bt('return function();');
+ bt('var a = function();');
+ bt('var a = 5 + function();');
+
+ bt('import foo.*;', 'import foo.*;'); // actionscript's import
+ test_fragment('function f(a: a, b: b)'); // actionscript
+
+ bt('{\n foo // something\n ,\n bar // something\n baz\n}');
+ bt('function a(a) {} function b(b) {} function c(c) {}', 'function a(a) {}\n\nfunction b(b) {}\n\nfunction c(c) {}');
+ bt('foo(a, function() {})');
+
+ bt('foo(a, /regex/)');
+
+ bt('/* foo */\n"x"');
+
+ reset_options();
+ //============================================================
+ opts.break_chained_methods = false;
+ opts.preserve_newlines = false;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar().baz().cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()');
+
+ opts.break_chained_methods = false;
+ opts.preserve_newlines = true;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz().cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()');
+
+ opts.break_chained_methods = true;
+ opts.preserve_newlines = false;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()');
+
+ opts.break_chained_methods = true;
+ opts.preserve_newlines = true;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()');
+
+ reset_options();
+ //============================================================
+ // Line wrap test intputs
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_1=('foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_2=('{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ ' if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ ' }' +
+ '}');
+
+ opts.preserve_newlines = false;
+ opts.wrap_line_length = 0;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 70;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 40;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 41;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 45;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ /* expected */
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}');
+
+ opts.preserve_newlines = true;
+ opts.wrap_line_length = 0;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 70;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+
+ opts.wrap_line_length = 40;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 41;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 45;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ /* expected */
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}');
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = false;
+ bt('if (foo) // comment\n bar();');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n /asdf/;');
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');',
+ 'this.oa = new OAuth(_requestToken, _accessToken, consumer_key);');
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}');
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}');
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;',
+ 'this.type = this.options =\n // comment\n this.enabled null;');
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();',
+ 'someObj.someFunc1()\n // This comment should not break the indent\n .someFunc2();');
+
+ bt('if (true ||\n!true) return;', 'if (true || !true) return;');
+
+ // these aren't ready yet.
+ //bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\n else a();');
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo) bar();\nelse car();');
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();');
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();');
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();');
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];',
+ 'if (options)\n'+
+ ' for (var p in options) this[p] = options[p];');
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];');
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());');
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();');
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());');
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c, d, e) {}');
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+
+ // This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())');
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n(\n if (a) b())');
+
+
+
+ bt("if\n(a)\nb();", "if (a) b();");
+ bt('var a =\nfoo', 'var a = foo');
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}");
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}");
+ bt('var a = /*i*/ "b";');
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/ "b";');
+ bt('var a = /*i*/\nb;', 'var a = /*i*/ b;');
+ bt('{\n\n\n"x"\n}', '{\n "x"\n}');
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a && b || c || d && e) e = f');
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a && (b || c || d) && e) e = f');
+ test_fragment('\n\n"x"', '"x"');
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\nb = 2;');
+
+ opts.preserve_newlines = true;
+ bt('if (foo) // comment\n bar();');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n /asdf/;');
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}');
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}');
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;');
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();');
+
+ bt('if (true ||\n!true) return;', 'if (true ||\n !true) return;');
+
+ // these aren't ready yet.
+ // bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\na();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\n else\n a();');
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo)\n bar();\nelse\n car();');
+ bt('if (foo) bar();\nelse\ncar();',
+ 'if (foo) bar();\nelse\n car();');
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();');
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();');
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();');
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];');
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];');
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());');
+ bt('if (options) do; while (b());',
+ 'if (options)\n do; while (b());');
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();');
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());');
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c,\n d, e) {}');
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\n\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ // This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())');
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n\n\n(\n if (a) b())');
+
+ // space between functions
+ bt('/*\n * foo\n */\nfunction foo() {}');
+ bt('// a nice function\nfunction foo() {}');
+ bt('function foo() {}\nfunction foo() {}',
+ 'function foo() {}\n\nfunction foo() {}'
+ );
+
+ bt('[\n function() {}\n]');
+
+
+
+ bt("if\n(a)\nb();", "if (a)\n b();");
+ bt('var a =\nfoo', 'var a =\n foo');
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}");
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}");
+ bt('var a = /*i*/ "b";');
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/\n "b";');
+ bt('var a = /*i*/\nb;', 'var a = /*i*/\n b;');
+ bt('{\n\n\n"x"\n}', '{\n\n\n "x"\n}');
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a &&\n b ||\n c ||\n d &&\n e) e = f');
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a &&\n (b ||\n c ||\n d) &&\n e) e = f');
+ test_fragment('\n\n"x"', '"x"');
+
+ // this beavior differs between js and python, defaults to unlimited in js, 10 in python
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;');
+ opts.max_preserve_newlines = 8;
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\nb = 2;');
+
+ reset_options();
+ //============================================================
+
+
+ Urlencoded.run_tests(sanitytest);
+ }
+
+ beautifier_tests();
+ beautifier_unconverted_tests();
+}
+
+if (typeof exports !== "undefined") {
+ exports.run_javascript_tests = run_javascript_tests;
+}
diff --git a/node_modules/js-beautify/js/test/node-beautify-html-perf-tests.js b/node_modules/js-beautify/js/test/node-beautify-html-perf-tests.js
new file mode 100644
index 0000000..bd0e849
--- /dev/null
+++ b/node_modules/js-beautify/js/test/node-beautify-html-perf-tests.js
@@ -0,0 +1,51 @@
+/*global js_beautify: true */
+/*jshint node:true */
+/*jshint unused:false */
+
+
+var fs = require('fs'),
+ SanityTest = require('./sanitytest'),
+ Benchmark = require('benchmark'),
+ Urlencoded = require('../lib/unpackers/urlencode_unpacker'),
+ js_beautify = require('../index').js_beautify,
+ css_beautify = require('../index').css_beautify,
+ html_beautify = require('../index').html_beautify;
+
+function node_beautifier_html_tests() {
+ console.log('Testing performance...');
+ var index_html = fs.readFileSync(__dirname + '/../../index.html', 'utf8');
+ var data_attr = fs.readFileSync(__dirname + '/../../test/resources/html-with-base64image.html', 'utf8');
+ var options = {
+ wrap_line_length: 80
+ };
+
+ //warm-up
+ html_beautify(index_html, options);
+ html_beautify(data_attr, options);
+
+ var suite = new Benchmark.Suite();
+
+ suite.add("html-beautify (index.html)", function() {
+ html_beautify(index_html, options);
+ })
+ .add("html-beautify (base64 image)", function() {
+ html_beautify(data_attr, options);
+ })
+ // add listeners
+ .on('cycle', function(event) {
+ console.log(String(event.target));
+ })
+ .on('error', function(event) {
+ return 1;
+ })
+ .on('complete', function(event) {})
+ .run();
+ return 0;
+}
+
+
+
+
+if (require.main === module) {
+ process.exit(node_beautifier_html_tests());
+}
\ No newline at end of file
diff --git a/node_modules/js-beautify/js/test/node-beautify-perf-tests.js b/node_modules/js-beautify/js/test/node-beautify-perf-tests.js
new file mode 100644
index 0000000..d62a7a5
--- /dev/null
+++ b/node_modules/js-beautify/js/test/node-beautify-perf-tests.js
@@ -0,0 +1,50 @@
+/*global js_beautify: true */
+/*jshint node:true */
+/*jshint unused:false */
+
+var fs = require('fs'),
+ SanityTest = require('./sanitytest'),
+ Benchmark = require('benchmark'),
+ Urlencoded = require('../lib/unpackers/urlencode_unpacker'),
+ js_beautify = require('../index').js_beautify,
+ css_beautify = require('../index').css_beautify,
+ html_beautify = require('../index').html_beautify;
+
+function node_beautifier_tests() {
+ console.log('Testing performance...');
+ var data = fs.readFileSync(__dirname + '/../../test/resources/underscore.js', 'utf8');
+ var data_min = fs.readFileSync(__dirname + '/../../test/resources/underscore-min.js', 'utf8');
+ var options = {
+ wrap_line_length: 80
+ };
+
+ //warm-up
+ js_beautify(data, options);
+ js_beautify(data_min, options);
+
+ var suite = new Benchmark.Suite();
+
+ suite.add("js-beautify (underscore)", function() {
+ js_beautify(data, options);
+ })
+ .add("js-beautify (underscore-min)", function() {
+ js_beautify(data_min, options);
+ })
+ // add listeners
+ .on('cycle', function(event) {
+ console.log(String(event.target));
+ })
+ .on('error', function(event) {
+ return 1;
+ })
+ .on('complete', function(event) {})
+ .run();
+ return 0;
+}
+
+
+
+
+if (require.main === module) {
+ process.exit(node_beautifier_tests());
+}
\ No newline at end of file
diff --git a/node_modules/js-beautify/js/test/node-beautify-tests.js b/node_modules/js-beautify/js/test/node-beautify-tests.js
new file mode 100755
index 0000000..55c4828
--- /dev/null
+++ b/node_modules/js-beautify/js/test/node-beautify-tests.js
@@ -0,0 +1,45 @@
+/*jshint node:true */
+
+var SanityTest = require('./sanitytest'),
+ Urlencoded = require('../lib/unpackers/urlencode_unpacker'),
+ run_javascript_tests = require('./generated/beautify-javascript-tests').run_javascript_tests,
+ run_css_tests = require('./generated/beautify-css-tests').run_css_tests,
+ run_html_tests = require('./generated/beautify-html-tests').run_html_tests;
+
+function test_legacy_names() {
+ var beautify = require('../index');
+ var results = new SanityTest();
+
+ console.log('First ensure that legacy import names equal the new ones');
+ results.expect(beautify.js, beautify.js_beautify);
+ results.expect(beautify.css, beautify.css_beautify);
+ results.expect(beautify.html, beautify.html_beautify);
+
+ console.log(results.results_raw());
+ return results;
+}
+
+function node_beautifier_tests(name, test_runner) {
+ console.log('Testing ' + name + ' with node.js CommonJS...');
+ var beautify = require('../index');
+
+ var results = new SanityTest();
+ test_runner(
+ results,
+ Urlencoded,
+ beautify.js,
+ beautify.html,
+ beautify.css);
+
+ console.log(results.results_raw());
+ return results;
+}
+
+if (require.main === module) {
+ process.exit(
+ test_legacy_names() +
+ node_beautifier_tests('js-beautifier', run_javascript_tests).get_exitcode() +
+ node_beautifier_tests('css-beautifier', run_css_tests).get_exitcode() +
+ node_beautifier_tests('html-beautifier', run_html_tests).get_exitcode()
+ );
+}
\ No newline at end of file
diff --git a/node_modules/js-beautify/js/test/requirejs-html-beautify.html b/node_modules/js-beautify/js/test/requirejs-html-beautify.html
new file mode 100644
index 0000000..a1088c0
--- /dev/null
+++ b/node_modules/js-beautify/js/test/requirejs-html-beautify.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+RequireJS test
+
+
+ This example loads the html-beautifier by using a relative path in the require call to the beautify-html.js file.
+ (also works works with absolute paths)
+
+
+
+require(["../lib/beautify-html"],function(html_beautify){
+ var input = document.getElementById("input").value;
+ var output = html_beautify.html_beautify(input);
+ document.getElementById("output").innerHTML = output;
+});
+
+
+Input
+
+
+Output
+
+
+
+
\ No newline at end of file
diff --git a/node_modules/js-beautify/js/test/resources/configerror/.jsbeautifyrc b/node_modules/js-beautify/js/test/resources/configerror/.jsbeautifyrc
new file mode 100644
index 0000000..be15894
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/configerror/.jsbeautifyrc
@@ -0,0 +1,6 @@
+{
+ "indent_size": 11,
+ "indent_char": " "
+ "indent_level": 0,
+ "indent_with_tabs": false
+}
diff --git a/node_modules/js-beautify/js/test/resources/configerror/subDir1/subDir2/empty.txt b/node_modules/js-beautify/js/test/resources/configerror/subDir1/subDir2/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/js-beautify/js/test/resources/editorconfig/.editorconfig b/node_modules/js-beautify/js/test/resources/editorconfig/.editorconfig
new file mode 100644
index 0000000..3fc2389
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/editorconfig/.editorconfig
@@ -0,0 +1,6 @@
+root = true
+
+[*.js]
+indent_style = space
+indent_size = 2
+insert_final_newline = false
diff --git a/node_modules/js-beautify/js/test/resources/editorconfig/cr/.editorconfig b/node_modules/js-beautify/js/test/resources/editorconfig/cr/.editorconfig
new file mode 100644
index 0000000..1f43b7d
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/editorconfig/cr/.editorconfig
@@ -0,0 +1,3 @@
+
+[*.js]
+end_of_line = cr
diff --git a/node_modules/js-beautify/js/test/resources/editorconfig/crlf/.editorconfig b/node_modules/js-beautify/js/test/resources/editorconfig/crlf/.editorconfig
new file mode 100644
index 0000000..28160b9
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/editorconfig/crlf/.editorconfig
@@ -0,0 +1,3 @@
+
+[*.js]
+end_of_line = crlf
diff --git a/node_modules/js-beautify/js/test/resources/editorconfig/error/.editorconfig b/node_modules/js-beautify/js/test/resources/editorconfig/error/.editorconfig
new file mode 100644
index 0000000..031c811
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/editorconfig/error/.editorconfig
@@ -0,0 +1 @@
+Random stuff in here to cause parse error
diff --git a/node_modules/js-beautify/js/test/resources/editorconfig/example-base.js b/node_modules/js-beautify/js/test/resources/editorconfig/example-base.js
new file mode 100644
index 0000000..fbcdbd7
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/editorconfig/example-base.js
@@ -0,0 +1,3 @@
+function indentMe() {
+ "no, me!"; // indent_size 4, will be beautified to 2 with editorconfig
+}
diff --git a/node_modules/js-beautify/js/test/resources/example1.js b/node_modules/js-beautify/js/test/resources/example1.js
new file mode 100644
index 0000000..279108f
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/example1.js
@@ -0,0 +1,3 @@
+function indentMe() {
+"no, me!";
+}
diff --git a/node_modules/js-beautify/js/test/resources/indent11chars/.jsbeautifyrc b/node_modules/js-beautify/js/test/resources/indent11chars/.jsbeautifyrc
new file mode 100644
index 0000000..73c8003
--- /dev/null
+++ b/node_modules/js-beautify/js/test/resources/indent11chars/.jsbeautifyrc
@@ -0,0 +1,6 @@
+{
+ "indent_size": 11,
+ "indent_char": " ",
+ "indent_level": 0,
+ "indent_with_tabs": false
+}
diff --git a/node_modules/js-beautify/js/test/resources/indent11chars/subDir1/subDir2/empty.txt b/node_modules/js-beautify/js/test/resources/indent11chars/subDir1/subDir2/empty.txt
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/js-beautify/js/test/run-tests b/node_modules/js-beautify/js/test/run-tests
new file mode 100755
index 0000000..86b14dc
--- /dev/null
+++ b/node_modules/js-beautify/js/test/run-tests
@@ -0,0 +1,17 @@
+#!/usr/bin/spidermonkey-1.7 -s
+
+//#!/usr/bin/js
+
+// a little helper for testing from command line
+// just run it, it will output the test results
+
+load('js/lib/beautify.js');
+load('js/test/sanitytest.js')
+load('js/test/beautify-tests.js')
+load('js/lib/unpackers/urlencode_unpacker.js')
+
+print(run_beautifier_tests(new SanityTest(), Urlencoded, js_beautify).results_raw())
+
+
+// for nodejs use this from the command line from the main directory:
+// node test/beautify-tests.js
diff --git a/node_modules/js-beautify/js/test/sanitytest.js b/node_modules/js-beautify/js/test/sanitytest.js
new file mode 100644
index 0000000..445b68e
--- /dev/null
+++ b/node_modules/js-beautify/js/test/sanitytest.js
@@ -0,0 +1,144 @@
+//
+// simple testing interface
+// written by Einar Lielmanis, einar@jsbeautifier.org
+//
+// usage:
+//
+// var t = new SanityTest(function (x) { return x; }, 'my function');
+// t.expect('input', 'output');
+// t.expect('a', 'a');
+// output_somewhere(t.results()); // good for , html safe-ish
+// alert(t.results_raw()); // html unescaped
+
+
+function SanityTest(func, name_of_test) {
+
+ var test_func = func || function(x) {
+ return x;
+ };
+
+ var test_name = name_of_test || '';
+
+ var n_failed = 0;
+ var n_succeeded = 0;
+
+ var failures = [];
+
+ this.test_function = function(func, name) {
+ test_func = func;
+ test_name = name || '';
+ };
+
+ this.get_exitcode = function() {
+ return n_succeeded === 0 || n_failed !== 0 ? 1 : 0;
+ };
+
+ this.expect = function(parameters, expected_value) {
+ // multi-parameter calls not supported (I don't need them now).
+ var result = test_func(parameters);
+ // proper array checking is a pain. i'll maybe do it later, compare strings representations instead
+ if ((result === expected_value) || (expected_value instanceof Array && result.join(', ') === expected_value.join(', '))) {
+ n_succeeded += 1;
+ } else {
+ n_failed += 1;
+ failures.push([test_name, parameters, expected_value, result]);
+ }
+ };
+
+
+ this.results_raw = function() {
+ var results = '';
+ if (n_failed === 0) {
+ if (n_succeeded === 0) {
+ results = 'No tests run.';
+ } else {
+ results = 'All ' + n_succeeded + ' tests passed.';
+ }
+ } else {
+ for (var i = 0; i < failures.length; i++) {
+ var f = failures[i];
+ if (f[0]) {
+ f[0] = f[0] + ' ';
+ }
+ results += '==== ' + f[0] + '============================================================\n';
+ results += '---- input -------\n' + this.prettyprint(f[1]) + '\n';
+ results += '---- expected ----\n' + this.prettyprint(f[2]) + '\n';
+ results += '---- output ------\n' + this.prettyprint(f[3]) + '\n';
+ results += '---- expected-ws ------\n' + this.prettyprint_whitespace(f[2]) + '\n';
+ results += '---- output-ws ------\n' + this.prettyprint_whitespace(f[3]) + '\n';
+ results += '================================================================\n\n';
+ }
+ results += n_failed + ' tests failed.\n';
+ }
+ return results;
+ };
+
+
+ this.results = function() {
+ return this.lazy_escape(this.results_raw());
+ };
+
+ this.prettyprint_whitespace = function(something, quote_strings) {
+ return (this.prettyprint(something, quote_strings)
+ .replace(/\r\n/g, '\\r\n')
+ .replace(/\n/g, '\\n\n')
+ .replace(/\r/g, '\\r\n')
+ .replace(/ /g, '_')
+ .replace(/\t/g, '===|'));
+ };
+
+ this.prettyprint = function(something, quote_strings) {
+ var type = typeof something;
+ switch (type.toLowerCase()) {
+ case 'string':
+ if (quote_strings) {
+ return "'" + something.replace("'", "\\'") + "'";
+ }
+ return something;
+ case 'number':
+ return '' + something;
+ case 'boolean':
+ return something ? 'true' : 'false';
+ case 'undefined':
+ return 'undefined';
+ case 'object':
+ if (something instanceof Array) {
+ var x = [];
+ var expected_index = 0;
+ for (var k in something) {
+ if (k === expected_index) {
+ x.push(this.prettyprint(something[k], true));
+ expected_index += 1;
+ } else {
+ x.push('\n' + k + ': ' + this.prettyprint(something[k], true));
+ }
+ }
+ return '[' + x.join(', ') + ']';
+ }
+ return 'object: ' + something;
+ default:
+ return type + ': ' + something;
+ }
+ };
+
+
+ this.lazy_escape = function(str) {
+ return str.replace(//g, '>').replace(/\n/g, ' ');
+ };
+
+
+ this.log = function() {
+ if (window.console) {
+ if (console.firebug) {
+ console.log.apply(console, Array.prototype.slice.call(arguments));
+ } else {
+ console.log.call(console, Array.prototype.slice.call(arguments));
+ }
+ }
+ };
+
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+ module.exports = SanityTest;
+}
\ No newline at end of file
diff --git a/node_modules/js-beautify/js/test/shell-smoke-test.sh b/node_modules/js-beautify/js/test/shell-smoke-test.sh
new file mode 100755
index 0000000..c32266d
--- /dev/null
+++ b/node_modules/js-beautify/js/test/shell-smoke-test.sh
@@ -0,0 +1,383 @@
+#!/usr/bin/env bash
+
+REL_SCRIPT_DIR="`dirname \"$0\"`"
+SCRIPT_DIR="`( cd \"$REL_SCRIPT_DIR\" && pwd )`"
+
+
+test_cli_common()
+{
+ echo ----------------------------------------
+ echo Testing common cli behavior...
+ CLI_SCRIPT_NAME=${1:?missing_param}.js
+ CLI_SCRIPT=$SCRIPT_DIR/../bin/$CLI_SCRIPT_NAME
+ echo Script: $CLI_SCRIPT
+
+ # should find the minimal help output
+ $CLI_SCRIPT 2>&1 | grep -q "Must pipe input or define at least one file\." || {
+ $CLI_SCRIPT 2>&1
+ echo "[$CLI_SCRIPT_NAME] Output should be help message."
+ exit 1
+ }
+
+ $CLI_SCRIPT 2> /dev/null && {
+ echo "[$CLI_SCRIPT_NAME (with no parameters)] Return code should be error."
+ exit 1
+ }
+
+ $CLI_SCRIPT -Z 2> /dev/null && {
+ echo "[$CLI_SCRIPT_NAME -Z] Return code for invalid parameter should be error."
+ exit 1
+ }
+
+ $CLI_SCRIPT -h > /dev/null || {
+ echo "[$CLI_SCRIPT_NAME -h] Return code should be success."
+ exit 1
+ }
+
+ $CLI_SCRIPT -v > /dev/null || {
+ echo "[$CLI_SCRIPT_NAME -v] Return code should be success."
+ exit 1
+ }
+
+ MISSING_FILE="$SCRIPT_DIR/../../../js/bin/missing_file"
+ MISSING_FILE_MESSAGE="Unable to open path"
+ $CLI_SCRIPT $MISSING_FILE 2> /dev/null && {
+ echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Return code should be error."
+ exit 1
+ }
+
+ $CLI_SCRIPT $MISSING_FILE 2>&1 | grep -q "$MISSING_FILE_MESSAGE" || {
+ echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Stderr should have useful message."
+ exit 1
+ }
+
+ if [ "`$CLI_SCRIPT $MISSING_FILE 2> /dev/null`" != "" ]; then
+ echo "[$CLI_SCRIPT_NAME $MISSING_FILE] Stdout should have no text."
+ exit 1
+ fi
+
+}
+
+setup_temp()
+{
+ mkdir -p target
+ TEST_TEMP=$PWD/`mktemp -d target/test_temp_XXXX`
+ echo Created $TEST_TEMP...
+}
+
+cleanup()
+{
+ rm -rf $TEST_TEMP && echo Removed $TEST_TEMP...
+ test -z $1 || exit $1
+}
+
+
+test_cli_js_beautify()
+{
+ echo ----------------------------------------
+ echo Testing js-beautify cli behavior...
+ CLI_SCRIPT=$SCRIPT_DIR/../bin/js-beautify.js
+
+ $CLI_SCRIPT $SCRIPT_DIR/../bin/js-beautify.js > /dev/null || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected succeed."
+ exit 1
+ }
+
+ $CLI_SCRIPT $SCRIPT_DIR/../bin/css-beautify.js > /dev/null || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/css-beautify.js was expected succeed."
+ exit 1
+ }
+
+ $CLI_SCRIPT $SCRIPT_DIR/../bin/js-beautify.js | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
+ exit 1
+ }
+
+ node $SCRIPT_DIR/../lib/cli.js $SCRIPT_DIR/../bin/js-beautify.js | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
+ exit 1
+ }
+
+ cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
+ exit 1
+ }
+
+ cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT - | diff $SCRIPT_DIR/../bin/js-beautify.js - || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js was expected to be unchanged."
+ exit 1
+ }
+
+ setup_temp
+ cat $SCRIPT_DIR/../bin/js-beautify.js | $CLI_SCRIPT -o $TEST_TEMP/js-beautify-pipe.js - && diff $TEST_TEMP/js-beautify-pipe.js $SCRIPT_DIR/../bin/js-beautify.js || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js should have been created in $TEST_TEMP/js-beautify-pipe.js."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $SCRIPT_DIR/../bin/js-beautify.js && diff $SCRIPT_DIR/../bin/js-beautify.js $TEST_TEMP/js-beautify.js || {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/js-beautify.js should have been created in $TEST_TEMP/js-beautify.js."
+ cleanup 1
+ }
+
+ # ensure new line settings work
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify-n.js -e '\n' $SCRIPT_DIR/../bin/js-beautify.js
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify-rn.js -e '\r\n' $TEST_TEMP/js-beautify-n.js
+
+ # ensure eol processed correctly
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify-n-dash.js --indent-size 2 --eol '\n' $TEST_TEMP/js-beautify-n.js
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify-rn-dash.js --indent-size 2 --eol '\r\n' $TEST_TEMP/js-beautify-n.js
+ diff -q $TEST_TEMP/js-beautify-n-dash.js $TEST_TEMP/js-beautify-rn-dash.js && {
+ diff $TEST_TEMP/js-beautify-n-dash.js $TEST_TEMP/js-beautify-rn-dash.js | cat -t -e
+ echo "js-beautify output for $TEST_TEMP/js-beautify-n-dash.js and $TEST_TEMP/js-beautify-rn-dash.js was expected to be different."
+ cleanup 1
+ }
+
+ diff -q $TEST_TEMP/js-beautify-n.js $TEST_TEMP/js-beautify-rn.js && {
+ diff $TEST_TEMP/js-beautify-n.js $TEST_TEMP/js-beautify-rn.js | cat -t -e
+ echo "js-beautify output for $TEST_TEMP/js-beautify-n.js and $TEST_TEMP/js-beautify-rn.js was expected to be different."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT $TEST_TEMP/js-beautify-n.js | diff -q $TEST_TEMP/js-beautify-n.js - || {
+ echo "js-beautify output for $TEST_TEMP/js-beautify-n.js was expected to be unchanged."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT -e 'auto' $TEST_TEMP/js-beautify-rn.js | diff -q $TEST_TEMP/js-beautify-rn.js - || {
+ echo "js-beautify output for $TEST_TEMP/js-beautify-rn.js was expected to be unchanged."
+ cleanup 1
+ }
+
+ # EditorConfig related tests
+ cp -r js/test/resources/editorconfig $TEST_TEMP/
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/example-ec.js --indent-size 2 -e '\n' $TEST_TEMP/editorconfig/example-base.js
+
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/cr/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/cr/example-ec.js --indent-size 2 -e '\r' $TEST_TEMP/editorconfig/example-base.js
+
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/crlf/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/crlf/example-ec.js --indent-size 2 -e '\r\n' $TEST_TEMP/editorconfig/example-base.js
+
+ $CLI_SCRIPT -o $TEST_TEMP/editorconfig/error/example.js --end-with-newline --indent-size 4 -e '\n' $TEST_TEMP/editorconfig/example-base.js
+
+ pushd $TEST_TEMP/editorconfig
+
+ cd $TEST_TEMP/editorconfig/error
+ $CLI_SCRIPT --editorconfig $TEST_TEMP/js-beautify-n.js \
+ > /dev/null || {
+ echo "Invalid editorconfig file should not report error (consistent with the EditorConfig)."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT --editorconfig example.js \
+ > /dev/null || {
+ echo "Invalid editorconfig file should not report error (consistent with the EditorConfig)."
+ cleanup 1
+ }
+
+ # TODO: EditorConfig setting should NOT overide cli setting, but that is
+ # the current by-design behavior, due to code limitations.
+
+ # file input scenario
+ SCENARIO=a
+ cd $TEST_TEMP/editorconfig || exit 1
+ $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/crlf || exit 1
+ $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/cr || exit 1
+ $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js example.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ # stdin input to stdout scenario
+ SCENARIO=b
+ cd $TEST_TEMP/editorconfig || exit 1
+ echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/crlf || exit 1
+ echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/cr || exit 1
+ echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js"
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig > example-${SCENARIO}.js \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+
+ # stdin input to file scenario
+ SCENARIO=c
+ cd $TEST_TEMP/editorconfig || exit 1
+ echo "cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js"
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/crlf || exit 1
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ cd $TEST_TEMP/editorconfig/cr || exit 1
+ cat example.js | $CLI_SCRIPT --end-with-newline --indent-size 6 --editorconfig -o example-${SCENARIO}.js - \
+ && diff -q example-${SCENARIO}.js example-ec.js || {
+ echo "EditorConfig setting should overide cli setting."
+ diff example-${SCENARIO}.js example-ec.js | cat -t -e
+ cleanup 1
+ }
+
+ popd
+ # End EditorConfig
+
+ # ensure unchanged files are not overwritten
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $SCRIPT_DIR/../bin/js-beautify.js
+ cp -p $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify-old.js
+ touch $TEST_TEMP/js-beautify.js
+ sleep 2
+ touch $TEST_TEMP/js-beautify-old.js
+ $CLI_SCRIPT -r $TEST_TEMP/js-beautify.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
+ echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -r"
+ cleanup 1
+ }
+
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
+ echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -o and same file name"
+ cleanup 1
+ }
+
+ $CLI_SCRIPT -o $TEST_TEMP/js-beautify.js $TEST_TEMP/js-beautify-old.js && test $TEST_TEMP/js-beautify.js -nt $TEST_TEMP/js-beautify-old.js && {
+ echo "js-beautify should not replace unchanged file $TEST_TEMP/js-beautify.js when using -o and different file name"
+ cleanup 1
+ }
+
+ $CLI_SCRIPT $SCRIPT_DIR/../bin/css-beautify.js | diff -q $SCRIPT_DIR/../bin/css-beautify.js - && {
+ echo "js-beautify output for $SCRIPT_DIR/../bin/css-beautify.js was expected to be different."
+ cleanup 1
+ }
+
+ unset HOME
+ unset USERPROFILE
+ $CLI_SCRIPT -o $TEST_TEMP/example1-default.js $SCRIPT_DIR/resources/example1.js || exit 1
+
+ $CLI_SCRIPT -o $TEST_TEMP/example1-sanity.js $TEST_TEMP/example1-default.js || exit 1
+ diff -q $TEST_TEMP/example1-default.js $TEST_TEMP/example1-sanity.js || {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be identical after no change in settings."
+ cleanup 1
+ }
+
+ cd $SCRIPT_DIR/resources/configerror
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js 2>&1 | grep -q "Error while loading beautifier configuration\." || {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be configration load error message."
+ cleanup 1
+ }
+
+ cd $SCRIPT_DIR/resources/indent11chars
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on CWD settings."
+ cleanup 1
+ }
+
+ cd $SCRIPT_DIR/resources/indent11chars/subDir1/subDir2
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on CWD parent folder settings."
+ cleanup 1
+ }
+ cd $SCRIPT_DIR
+
+ export HOME=$SCRIPT_DIR/resources/indent11chars
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on HOME settings."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT -o $TEST_TEMP/example1-indent11chars.js $TEST_TEMP/example1-default.js
+
+ unset HOME
+ export USERPROFILE=$SCRIPT_DIR/resources/indent11chars
+ # node -p 'process.env["USERPROFILE"] || process.env["HOME"] || "unset"'
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-indent11chars.js - || {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be identical for same HOME and USERPROFILE settings."
+ cleanup 1
+ }
+
+ $CLI_SCRIPT $TEST_TEMP/example1-default.js | diff -q $TEST_TEMP/example1-default.js - && {
+ echo "js-beautify output for $TEST_TEMP/example1-default.js was expected to be different based on USERPROFILE settings."
+ cleanup 1
+ }
+
+ cleanup
+}
+
+test_smoke_js_beautify()
+{
+ echo ----------------------------------------
+ echo Testing js-beautify functionality...
+ node $SCRIPT_DIR/node-beautify-tests.js || exit 1
+ node $SCRIPT_DIR/amd-beautify-tests.js || exit 1
+}
+
+
+test_performance_js_beautify()
+{
+ echo ----------------------------------------
+ echo Testing js-beautify performance...
+ node $SCRIPT_DIR/node-beautify-perf-tests.js || exit 1
+ echo ----------------------------------------
+}
+
+test_performance_html_beautify()
+{
+ echo ----------------------------------------
+ echo Testing html-beautify performance...
+ node $SCRIPT_DIR/node-beautify-html-perf-tests.js || exit 1
+ echo ----------------------------------------
+}
+
+test_cli_common css-beautify
+test_cli_common html-beautify
+test_cli_common js-beautify
+
+test_cli_js_beautify
+test_smoke_js_beautify
+test_performance_js_beautify
+test_performance_html_beautify
+
+echo ----------------------------------------
+echo $0 - PASSED.
+echo ----------------------------------------
diff --git a/node_modules/js-beautify/jsbeautifyrc b/node_modules/js-beautify/jsbeautifyrc
new file mode 100644
index 0000000..eb55c23
--- /dev/null
+++ b/node_modules/js-beautify/jsbeautifyrc
@@ -0,0 +1,18 @@
+{
+ "indent_size": 4,
+ "indent_char": " ",
+ "indent_level": 0,
+ "indent_with_tabs": false,
+ "preserve_newlines": true,
+ "max_preserve_newlines": 10,
+ "jslint_happy": false,
+ "space_after_anon_function": false,
+ "brace_style": "collapse,preserve-inline",
+ "keep_array_indentation": false,
+ "keep_function_indentation": false,
+ "space_before_conditional": true,
+ "break_chained_methods": false,
+ "eval_code": false,
+ "unescape_strings": false,
+ "wrap_line_length": 0
+}
diff --git a/node_modules/js-beautify/package.json b/node_modules/js-beautify/package.json
new file mode 100644
index 0000000..85c9be4
--- /dev/null
+++ b/node_modules/js-beautify/package.json
@@ -0,0 +1,148 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "js-beautify@^1.6.11",
+ "scope": null,
+ "escapedName": "js-beautify",
+ "name": "js-beautify",
+ "rawSpec": "^1.6.11",
+ "spec": ">=1.6.11 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli"
+ ]
+ ],
+ "_from": "js-beautify@>=1.6.11 <2.0.0",
+ "_id": "js-beautify@1.6.12",
+ "_inCache": true,
+ "_location": "/js-beautify",
+ "_nodeVersion": "7.2.1",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/js-beautify-1.6.12.tgz_1489984823357_0.011489433469250798"
+ },
+ "_npmUser": {
+ "name": "bitwiseman",
+ "email": "bitwiseman@gmail.com"
+ },
+ "_npmVersion": "4.0.5",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "js-beautify@^1.6.11",
+ "scope": null,
+ "escapedName": "js-beautify",
+ "name": "js-beautify",
+ "rawSpec": "^1.6.11",
+ "spec": ">=1.6.11 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/sequelize-cli"
+ ],
+ "_resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.12.tgz",
+ "_shasum": "78b75933505d376da6e5a28e9b7887e0094db8b5",
+ "_shrinkwrap": null,
+ "_spec": "js-beautify@^1.6.11",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli",
+ "author": {
+ "name": "Einar Lielmanis",
+ "email": "einar@jsbeautifier.org"
+ },
+ "bin": {
+ "css-beautify": "./js/bin/css-beautify.js",
+ "html-beautify": "./js/bin/html-beautify.js",
+ "js-beautify": "./js/bin/js-beautify.js"
+ },
+ "bugs": {
+ "url": "https://github.com/beautify-web/js-beautify/issues"
+ },
+ "contributors": [
+ {
+ "name": "Vital Batmanov",
+ "email": "vital76@gmail.com"
+ },
+ {
+ "name": "Chris J. Shull",
+ "email": "chrisjshull@gmail.com"
+ },
+ {
+ "name": "Gian Marco Gherardi",
+ "email": "gianmarco.gherardi@gmail.com"
+ },
+ {
+ "name": "Stan",
+ "email": "stasson@orc.ru"
+ },
+ {
+ "name": "Vittorio Gambaletta",
+ "email": "VittGam@vittgam.net"
+ },
+ {
+ "name": "Daniel Stockman",
+ "email": "daniel.stockman@gmail.com"
+ },
+ {
+ "name": "Harutyun Amirjanyan",
+ "email": "amirjanyan@gmail.com"
+ },
+ {
+ "name": "Nochum Sossonko",
+ "email": "nsossonko@hotmail.com"
+ },
+ {
+ "name": "Liam Newman",
+ "email": "bitwiseman@gmail.com"
+ }
+ ],
+ "dependencies": {
+ "config-chain": "~1.1.5",
+ "editorconfig": "^0.13.2",
+ "mkdirp": "~0.5.0",
+ "nopt": "~3.0.1"
+ },
+ "description": "jsbeautifier.org for node",
+ "devDependencies": {
+ "benchmark": "2.1.0",
+ "jshint": "~2.9.1",
+ "mustache": "~2.2.1",
+ "node-static": "~0.7.1",
+ "requirejs": "2.1.x"
+ },
+ "directories": {
+ "lib": "js/lib",
+ "test": "js/test"
+ },
+ "dist": {
+ "shasum": "78b75933505d376da6e5a28e9b7887e0094db8b5",
+ "tarball": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.12.tgz"
+ },
+ "gitHead": "4a4bb0d03a6dc9a1e4ade5e220e3dd81a320242e",
+ "homepage": "http://jsbeautifier.org/",
+ "keywords": [
+ "beautify",
+ "beautifier",
+ "code-quality"
+ ],
+ "license": "MIT",
+ "main": "js/index.js",
+ "maintainers": [
+ {
+ "name": "evocateur",
+ "email": "daniel.stockman@gmail.com"
+ },
+ {
+ "name": "bitwiseman",
+ "email": "bitwiseman@gmail.com"
+ }
+ ],
+ "name": "js-beautify",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/beautify-web/js-beautify.git"
+ },
+ "scripts": {},
+ "version": "1.6.12"
+}
diff --git a/node_modules/js-beautify/test/data/css/node.mustache b/node_modules/js-beautify/test/data/css/node.mustache
new file mode 100644
index 0000000..612e2f2
--- /dev/null
+++ b/node_modules/js-beautify/test/data/css/node.mustache
@@ -0,0 +1,269 @@
+/*
+{{&header_text}}
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+/*jshint unused:false */
+
+function run_css_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_beautify)
+{
+
+ var default_opts = {
+ indent_size: 4,
+ indent_char: ' ',
+ preserve_newlines: true,
+ jslint_happy: false,
+ keep_array_indentation: false,
+ brace_style: 'collapse',
+ space_before_conditional: true,
+ break_chained_methods: false,
+ selector_separator: '\n',
+ end_with_newline: false
+ };
+ var opts;
+
+{{#default_options}} default_opts.{{name}} = {{&value}};
+{{/default_options}}
+
+ function reset_options()
+ {
+ opts = JSON.parse(JSON.stringify(default_opts));
+ }
+
+ function test_css_beautifier(input)
+ {
+ return css_beautify(input, opts);
+ }
+
+ var sanitytest;
+
+ // test the input on beautifier with the current flag settings
+ // does not check the indentation / surroundings as bt() does
+ function test_fragment(input, expected)
+ {
+ expected = expected || expected === '' ? expected : input;
+ sanitytest.expect(input, expected);
+ // if the expected is different from input, run it again
+ // expected output should be unchanged when run twice.
+ if (expected !== input) {
+ sanitytest.expect(expected, expected);
+ }
+
+ // Everywhere we do newlines, they should be replaced with opts.eol
+ opts.eol = '\r\\n';
+ expected = expected.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ if (input.indexOf('\n') !== -1) {
+ input = input.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ // Ensure support for auto eol detection
+ opts.eol = 'auto';
+ sanitytest.expect(input, expected);
+ }
+ opts.eol = '\n';
+ }
+
+ // test css
+ function t(input, expectation)
+ {
+ var wrapped_input, wrapped_expectation;
+
+ expectation = expectation || expectation === '' ? expectation : input;
+ sanitytest.test_function(test_css_beautifier, 'css_beautify');
+ test_fragment(input, expectation);
+ }
+
+ function unicode_char(value) {
+ return String.fromCharCode(value);
+ }
+
+ function beautifier_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ t(".tabs {}");
+
+{{#groups}}{{#set_mustache_tags}}.{{/set_mustache_tags}}
+ //============================================================
+ {{^matrix}}
+ // {{&name}}
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+ {{#matrix}}
+ // {{&name}} - ({{#matrix_context_string}}.{{/matrix_context_string}})
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+{{#unset_mustache_tags}}.{{/unset_mustache_tags}}{{/groups}}
+ }
+
+ function beautifier_unconverted_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ // test basic css beautifier
+ t(".tabs {}");
+ t(".tabs{color:red;}", ".tabs {\n\tcolor: red;\n}");
+ t(".tabs{color:rgb(255, 255, 0)}", ".tabs {\n\tcolor: rgb(255, 255, 0)\n}");
+ t(".tabs{background:url('back.jpg')}", ".tabs {\n\tbackground: url('back.jpg')\n}");
+ t("#bla, #foo{color:red}", "#bla,\n#foo {\n\tcolor: red\n}");
+ t("@media print {.tab{}}", "@media print {\n\t.tab {}\n}");
+ t("@media print {.tab{background-image:url(foo@2x.png)}}", "@media print {\n\t.tab {\n\t\tbackground-image: url(foo@2x.png)\n\t}\n}");
+
+ t("a:before {\n" +
+ "\tcontent: 'a{color:black;}\"\"\\'\\'\"\\n\\n\\na{color:black}\';\n" +
+ "}");
+
+ //lead-in whitespace determines base-indent.
+ // lead-in newlines are stripped.
+ t("\n\na, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}");
+ t(" a, img {padding: 0.2px}", " a,\n img {\n \tpadding: 0.2px\n }");
+ t(" \t \na, img {padding: 0.2px}", " \t a,\n \t img {\n \t \tpadding: 0.2px\n \t }");
+ t("\n\n a, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}");
+
+ // separate selectors
+ t("#bla, #foo{color:red}", "#bla,\n#foo {\n\tcolor: red\n}");
+ t("a, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}");
+
+ // block nesting
+ t("#foo {\n\tbackground-image: url(foo@2x.png);\n\t@font-face {\n\t\tfont-family: 'Bitstream Vera Serif Bold';\n\t\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n\t}\n}");
+ t("@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo@2x.png);\n\t}\n\t@font-face {\n\t\tfont-family: 'Bitstream Vera Serif Bold';\n\t\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n\t}\n}");
+/*
+@font-face {
+ font-family: 'Bitstream Vera Serif Bold';
+ src: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');
+}
+@media screen {
+ #foo:hover {
+ background-image: url(foo.png);
+ }
+ @media screen and (min-device-pixel-ratio: 2) {
+ @font-face {
+ font-family: 'Helvetica Neue'
+ }
+ #foo:hover {
+ background-image: url(foo@2x.png);
+ }
+ }
+}
+*/
+ t("@font-face {\n\tfont-family: 'Bitstream Vera Serif Bold';\n\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n}\n@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo.png);\n\t}\n\t@media screen and (min-device-pixel-ratio: 2) {\n\t\t@font-face {\n\t\t\tfont-family: 'Helvetica Neue'\n\t\t}\n\t\t#foo:hover {\n\t\t\tbackground-image: url(foo@2x.png);\n\t\t}\n\t}\n}");
+
+ // less-css cases
+ t('.well{@well-bg:@bg-color;@well-fg:@fg-color;}','.well {\n\t@well-bg: @bg-color;\n\t@well-fg: @fg-color;\n}');
+ t('.well {&.active {\nbox-shadow: 0 1px 1px @border-color, 1px 0 1px @border-color;}}',
+ '.well {\n' +
+ '\t&.active {\n' +
+ '\t\tbox-shadow: 0 1px 1px @border-color, 1px 0 1px @border-color;\n' +
+ '\t}\n' +
+ '}');
+ t('a {\n' +
+ '\tcolor: blue;\n' +
+ '\t&:hover {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '\t& & &&&.active {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '}');
+
+ // Not sure if this is sensible
+ // but I believe it is correct to not remove the space in "&: hover".
+ t('a {\n' +
+ '\t&: hover {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '}');
+
+ // import
+ t('@import "test";');
+
+ // don't break nested pseudo-classes
+ t("a:first-child{color:red;div:first-child{color:black;}}",
+ "a:first-child {\n\tcolor: red;\n\tdiv:first-child {\n\t\tcolor: black;\n\t}\n}");
+
+ // handle SASS/LESS parent reference
+ t("div{&:first-letter {text-transform: uppercase;}}",
+ "div {\n\t&:first-letter {\n\t\ttext-transform: uppercase;\n\t}\n}");
+
+ //nested modifiers (&:hover etc)
+ t(".tabs{&:hover{width:10px;}}", ".tabs {\n\t&:hover {\n\t\twidth: 10px;\n\t}\n}");
+ t(".tabs{&.big{width:10px;}}", ".tabs {\n\t&.big {\n\t\twidth: 10px;\n\t}\n}");
+ t(".tabs{&>big{width:10px;}}", ".tabs {\n\t&>big {\n\t\twidth: 10px;\n\t}\n}");
+ t(".tabs{&+.big{width:10px;}}", ".tabs {\n\t&+.big {\n\t\twidth: 10px;\n\t}\n}");
+
+ //nested rules
+ t(".tabs{.child{width:10px;}}", ".tabs {\n\t.child {\n\t\twidth: 10px;\n\t}\n}");
+
+ //variables
+ t("@myvar:10px;.tabs{width:10px;}", "@myvar: 10px;\n.tabs {\n\twidth: 10px;\n}");
+ t("@myvar:10px; .tabs{width:10px;}", "@myvar: 10px;\n.tabs {\n\twidth: 10px;\n}");
+
+ // test options
+ opts.indent_size = 2;
+ opts.indent_char = ' ';
+ opts.selector_separator_newline = false;
+
+ // pseudo-classes and pseudo-elements
+ t("#foo:hover {\n background-image: url(foo@2x.png)\n}");
+ t("#foo *:hover {\n color: purple\n}");
+ t("::selection {\n color: #ff0000;\n}");
+
+ // TODO: don't break nested pseduo-classes
+ t("@media screen {.tab,.bat:hover {color:red}}", "@media screen {\n .tab, .bat:hover {\n color: red\n }\n}");
+
+ // particular edge case with braces and semicolons inside tags that allows custom text
+ t("a:not(\"foobar\\\";{}omg\"){\ncontent: 'example\\';{} text';\ncontent: \"example\\\";{} text\";}",
+ "a:not(\"foobar\\\";{}omg\") {\n content: 'example\\';{} text';\n content: \"example\\\";{} text\";\n}");
+
+ // may not eat the space before "["
+ t('html.js [data-custom="123"] {\n opacity: 1.00;\n}');
+ t('html.js *[data-custom="123"] {\n opacity: 1.00;\n}');
+ }
+
+ beautifier_tests();
+ beautifier_unconverted_tests();
+}
+
+if (typeof exports !== "undefined") {
+ exports.run_css_tests = run_css_tests;
+}
diff --git a/node_modules/js-beautify/test/data/css/python.mustache b/node_modules/js-beautify/test/data/css/python.mustache
new file mode 100644
index 0000000..8811661
--- /dev/null
+++ b/node_modules/js-beautify/test/data/css/python.mustache
@@ -0,0 +1,270 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+'''
+{{&header_text}}
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+'''
+
+import unittest
+import cssbeautifier
+import copy
+
+class CSSBeautifierTest(unittest.TestCase):
+
+ options = None
+
+ @classmethod
+ def setUpClass(cls):
+ false = False
+ true = True
+
+ default_options = cssbeautifier.default_options()
+ default_options.indent_size = 1
+ default_options.indent_char = '\t'
+ default_options.selector_separator_newline = true
+ default_options.end_with_newline = false
+ default_options.newline_between_rules = false
+
+{{#default_options}} default_options.{{name}} = {{&value}}
+{{/default_options}}
+
+ cls.default_options = default_options
+
+ def reset_options(self):
+ self.options = copy.copy(self.default_options)
+
+ def testGenerated(self):
+ self.reset_options()
+ test_fragment = self.decodesto
+ t = self.decodesto
+
+ false = False
+ true = True
+
+{{#groups}}{{#set_mustache_tags}}.{{/set_mustache_tags}}
+ #============================================================
+ {{^matrix}}
+ # {{&name}}
+ self.reset_options();
+ {{#options}}
+ self.options.{{name}} = {{&value}}
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}}
+ {{/tests}}
+
+ {{/matrix}}
+ {{#matrix}}
+ # {{&name}} - ({{#matrix_context_string}}.{{/matrix_context_string}})
+ self.reset_options();
+ {{#options}}
+ self.options.{{name}} = {{&value}}
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}}
+ {{/tests}}
+
+ {{/matrix}}
+{{#unset_mustache_tags}}.{{/unset_mustache_tags}}{{/groups}}
+
+ def testNewline(self):
+ self.reset_options()
+ t = self.decodesto
+
+ self.options.end_with_newline = True
+ t("", "\n")
+ t("\n", "\n")
+ t(".tabs{}\n", ".tabs {}\n")
+ t(".tabs{}", ".tabs {}\n")
+
+ def testBasics(self):
+ self.reset_options()
+ t = self.decodesto
+
+ t("", "")
+ t("\n", "")
+ t(".tabs{}\n", ".tabs {}")
+ t(".tabs{}", ".tabs {}")
+ t(".tabs{color:red}", ".tabs {\n\tcolor: red\n}")
+ t(".tabs{color:rgb(255, 255, 0)}", ".tabs {\n\tcolor: rgb(255, 255, 0)\n}")
+ t(".tabs{background:url('back.jpg')}", ".tabs {\n\tbackground: url('back.jpg')\n}")
+ t("#bla, #foo{color:red}", "#bla,\n#foo {\n\tcolor: red\n}")
+ t("@media print {.tab{}}", "@media print {\n\t.tab {}\n}")
+ t("@media print {.tab{background-image:url(foo@2x.png)}}", "@media print {\n\t.tab {\n\t\tbackground-image: url(foo@2x.png)\n\t}\n}")
+
+ t("a:before {\n" +
+ "\tcontent: 'a{color:black;}\"\"\\'\\'\"\\n\\n\\na{color:black}\';\n" +
+ "}");
+
+ # may not eat the space before "["
+ t('html.js [data-custom="123"] {\n\topacity: 1.00;\n}')
+ t('html.js *[data-custom="123"] {\n\topacity: 1.00;\n}')
+
+ # lead-in whitespace determines base-indent.
+ # lead-in newlines are stripped.
+ t("\n\na, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}")
+ t(" a, img {padding: 0.2px}", " a,\n img {\n \tpadding: 0.2px\n }")
+ t(" \t \na, img {padding: 0.2px}", " \t a,\n \t img {\n \t \tpadding: 0.2px\n \t }")
+ t("\n\n a, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}")
+
+ def testSeperateSelectors(self):
+ self.reset_options()
+ t = self.decodesto
+
+ t("#bla, #foo{color:red}", "#bla,\n#foo {\n\tcolor: red\n}")
+ t("a, img {padding: 0.2px}", "a,\nimg {\n\tpadding: 0.2px\n}")
+
+
+ def testBlockNesting(self):
+ self.reset_options()
+ t = self.decodesto
+
+ t("#foo {\n\tbackground-image: url(foo@2x.png);\n\t@font-face {\n\t\tfont-family: 'Bitstream Vera Serif Bold';\n\t\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n\t}\n}")
+ t("@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo@2x.png);\n\t}\n\t@font-face {\n\t\tfont-family: 'Bitstream Vera Serif Bold';\n\t\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n\t}\n}")
+
+# @font-face {
+# font-family: 'Bitstream Vera Serif Bold';
+# src: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');
+# }
+# @media screen {
+# #foo:hover {
+# background-image: url(foo.png);
+# }
+# @media screen and (min-device-pixel-ratio: 2) {
+# @font-face {
+# font-family: 'Helvetica Neue'
+# }
+# #foo:hover {
+# background-image: url(foo@2x.png);
+# }
+# }
+# }
+ t("@font-face {\n\tfont-family: 'Bitstream Vera Serif Bold';\n\tsrc: url('http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf');\n}\n@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo.png);\n\t}\n\t@media screen and (min-device-pixel-ratio: 2) {\n\t\t@font-face {\n\t\t\tfont-family: 'Helvetica Neue'\n\t\t}\n\t\t#foo:hover {\n\t\t\tbackground-image: url(foo@2x.png);\n\t\t}\n\t}\n}")
+
+
+ def testOptions(self):
+ self.reset_options()
+ self.options.indent_size = 2
+ self.options.indent_char = ' '
+ self.options.selector_separator_newline = False
+ t = self.decodesto
+
+ # pseudo-classes and pseudo-elements
+ t("#foo:hover {\n background-image: url(foo@2x.png)\n}")
+ t("#foo *:hover {\n color: purple\n}")
+ t("::selection {\n color: #ff0000;\n}")
+
+ # TODO: don't break nested pseduo-classes
+ t("@media screen {.tab,.bat:hover {color:red}}", "@media screen {\n .tab, .bat:hover {\n color: red\n }\n}")
+
+ # particular edge case with braces and semicolons inside tags that allows custom text
+ t( "a:not(\"foobar\\\";{}omg\"){\ncontent: 'example\\';{} text';\ncontent: \"example\\\";{} text\";}",
+ "a:not(\"foobar\\\";{}omg\") {\n content: 'example\\';{} text';\n content: \"example\\\";{} text\";\n}")
+
+ def testLessCss(self):
+ self.reset_options()
+ t = self.decodesto
+
+ t('.well{ \n @well-bg:@bg-color;@well-fg:@fg-color;}','.well {\n\t@well-bg: @bg-color;\n\t@well-fg: @fg-color;\n}')
+ t('.well {&.active {\nbox-shadow: 0 1px 1px @border-color, 1px 0 1px @border-color;}}',
+ '.well {\n' +
+ '\t&.active {\n' +
+ '\t\tbox-shadow: 0 1px 1px @border-color, 1px 0 1px @border-color;\n' +
+ '\t}\n' +
+ '}')
+ t('a {\n' +
+ '\tcolor: blue;\n' +
+ '\t&:hover {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '\t& & &&&.active {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '}')
+
+ # Not sure if this is sensible
+ # but I believe it is correct to not remove the space in "&: hover".
+ t('a {\n' +
+ '\t&: hover {\n' +
+ '\t\tcolor: green;\n' +
+ '\t}\n' +
+ '}');
+
+ # import
+ t('@import "test";');
+
+ # don't break nested pseudo-classes
+ t("a:first-child{color:red;div:first-child{color:black;}}",
+ "a:first-child {\n\tcolor: red;\n\tdiv:first-child {\n\t\tcolor: black;\n\t}\n}");
+
+ # handle SASS/LESS parent reference
+ t("div{&:first-letter {text-transform: uppercase;}}",
+ "div {\n\t&:first-letter {\n\t\ttext-transform: uppercase;\n\t}\n}");
+
+ # nested modifiers (&:hover etc)
+ t(".tabs{&:hover{width:10px;}}", ".tabs {\n\t&:hover {\n\t\twidth: 10px;\n\t}\n}")
+ t(".tabs{&.big{width:10px;}}", ".tabs {\n\t&.big {\n\t\twidth: 10px;\n\t}\n}")
+ t(".tabs{&>big{width:10px;}}", ".tabs {\n\t&>big {\n\t\twidth: 10px;\n\t}\n}")
+ t(".tabs{&+.big{width:10px;}}", ".tabs {\n\t&+.big {\n\t\twidth: 10px;\n\t}\n}")
+
+ # nested rules
+ t(".tabs{.child{width:10px;}}", ".tabs {\n\t.child {\n\t\twidth: 10px;\n\t}\n}")
+
+ # variables
+ t("@myvar:10px;.tabs{width:10px;}", "@myvar: 10px;\n.tabs {\n\twidth: 10px;\n}")
+ t("@myvar:10px; .tabs{width:10px;}", "@myvar: 10px;\n.tabs {\n\twidth: 10px;\n}")
+
+ def decodesto(self, input, expectation=None):
+ if expectation == None:
+ expectation = input
+
+ self.assertMultiLineEqual(
+ cssbeautifier.beautify(input, self.options), expectation)
+
+ # if the expected is different from input, run it again
+ # expected output should be unchanged when run twice.
+ if not expectation != input:
+ self.assertMultiLineEqual(
+ cssbeautifier.beautify(expectation, self.options), expectation)
+
+ # Everywhere we do newlines, they should be replaced with opts.eol
+ self.options.eol = '\r\\n';
+ expectation = expectation.replace('\n', '\r\n')
+ self.assertMultiLineEqual(
+ cssbeautifier.beautify(input, self.options), expectation)
+ if input.find('\n') != -1:
+ input = input.replace('\n', '\r\n')
+ self.assertMultiLineEqual(
+ cssbeautifier.beautify(input, self.options), expectation)
+ # Ensure support for auto eol detection
+ self.options.eol = 'auto'
+ self.assertMultiLineEqual(
+ cssbeautifier.beautify(input, self.options), expectation)
+ self.options.eol = '\n'
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/node_modules/js-beautify/test/data/css/tests.js b/node_modules/js-beautify/test/data/css/tests.js
new file mode 100644
index 0000000..43ca23a
--- /dev/null
+++ b/node_modules/js-beautify/test/data/css/tests.js
@@ -0,0 +1,445 @@
+/*
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+
+exports.test_data = {
+ default_options: [
+ { name: "indent_size", value: "1" },
+ { name: "indent_char", value: "'\\t'" },
+ { name: "selector_separator_newline", value: "true" },
+ { name: "end_with_newline", value: "false" },
+ { name: "newline_between_rules", value: "false" },
+ { name: "space_around_combinator", value: "false" },
+ { name: "preserve_newlines", value: "false" },
+ // deprecated
+ { name: "space_around_selector_separator", value: "false" }
+ ],
+ groups: [{
+ name: "End With Newline",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "end_with_newline", value: "true" }
+ ],
+ eof: '\\n'
+ }, {
+ options: [
+ { name: "end_with_newline", value: "false" }
+ ],
+ eof: ''
+ }],
+ tests: [
+ { fragment: true, input: '', output: '{{eof}}' },
+ { fragment: true, input: ' .tabs{}', output: ' .tabs {}{{eof}}' },
+ { fragment: true, input: ' \n\n.tabs{}\n\n\n\n', output: ' .tabs {}{{eof}}' },
+ { fragment: true, input: '\n', output: '{{eof}}' }
+ ],
+ }, {
+ name: "Empty braces",
+ description: "",
+ tests: [
+ { input: '.tabs{}', output: '.tabs {}' },
+ { input: '.tabs { }', output: '.tabs {}' },
+ { input: '.tabs { }', output: '.tabs {}' },
+ // When we support preserving newlines this will need to change
+ { input: '.tabs \n{\n \n }', output: '.tabs {}' }
+ ],
+ }, {
+ name: "",
+ description: "",
+ tests: [{
+ input: '#cboxOverlay {\n\tbackground: url(images/overlay.png) repeat 0 0;\n\topacity: 0.9;\n\tfilter: alpha(opacity = 90);\n}',
+ output: '#cboxOverlay {\n\tbackground: url(images/overlay.png) repeat 0 0;\n\topacity: 0.9;\n\tfilter: alpha(opacity=90);\n}'
+ }, ],
+ }, {
+ name: "Support simple language specific option inheritance/overriding",
+ description: "Support simple language specific option inheritance/overriding",
+ matrix: [{
+ options: [
+ { name: "indent_char", value: "' '" },
+ { name: "indent_size", value: "4" },
+ { name: "js", value: "{ 'indent_size': 3 }" },
+ { name: "css", value: "{ 'indent_size': 5 }" }
+ ],
+ c: ' ',
+ },
+ {
+ options: [
+ { name: "indent_char", value: "' '" },
+ { name: "indent_size", value: "4" },
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 } }" }
+ ],
+ c: ' '
+ },
+ {
+ options: [
+ { name: "indent_char", value: "' '" },
+ { name: "indent_size", value: "9" },
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 8 }, 'indent_size': 2}" },
+ { name: "js", value: "{ 'indent_size': 5 }" },
+ { name: "css", value: "{ 'indent_size': 3 }" }
+ ],
+ c: ' '
+ }
+ ],
+ tests: [{
+ unchanged: [
+ '.selector {',
+ '{{c}}font-size: 12px;',
+ '}'
+ ]
+ }]
+ }, {
+ name: "Space Around Combinator",
+ description: "",
+ matrix: [{
+ options: [{ name: "space_around_combinator", value: "true" }],
+ space: ' '
+ }, {
+ options: [{ name: "space_around_combinator", value: "false" }],
+ space: ''
+ }, {
+ // space_around_selector_separator is deprecated, but needs to keep working for now.
+ options: [{ name: "space_around_selector_separator", value: "true" }],
+ space: ' '
+ }],
+ tests: [
+ { input: 'a>b{}', output: 'a{{space}}>{{space}}b {}' },
+ { input: 'a~b{}', output: 'a{{space}}~{{space}}b {}' },
+ { input: 'a+b{}', output: 'a{{space}}+{{space}}b {}' },
+ { input: 'a+b>c{}', output: 'a{{space}}+{{space}}b{{space}}>{{space}}c {}' },
+ { input: 'a > b{}', output: 'a{{space}}>{{space}}b {}' },
+ { input: 'a ~ b{}', output: 'a{{space}}~{{space}}b {}' },
+ { input: 'a + b{}', output: 'a{{space}}+{{space}}b {}' },
+ { input: 'a + b > c{}', output: 'a{{space}}+{{space}}b{{space}}>{{space}}c {}' },
+ {
+ input: 'a > b{width: calc(100% + 45px);}',
+ output: [
+ 'a{{space}}>{{space}}b {',
+ '\twidth: calc(100% + 45px);',
+ '}'
+ ]
+ },
+ {
+ input: 'a ~ b{width: calc(100% + 45px);}',
+ output: [
+ 'a{{space}}~{{space}}b {',
+ '\twidth: calc(100% + 45px);',
+ '}'
+ ]
+ },
+ {
+ input: 'a + b{width: calc(100% + 45px);}',
+ output: [
+ 'a{{space}}+{{space}}b {',
+ '\twidth: calc(100% + 45px);',
+ '}'
+ ]
+ },
+ {
+ input: 'a + b > c{width: calc(100% + 45px);}',
+ output: [
+ 'a{{space}}+{{space}}b{{space}}>{{space}}c {',
+ '\twidth: calc(100% + 45px);',
+ '}'
+ ]
+ }
+ ]
+ }, {
+ name: 'Selector Separator',
+ description: '',
+ matrix: [{
+ options: [
+ { name: 'selector_separator_newline', value: 'false' },
+ { name: 'selector_separator', value: '" "' }
+ ],
+ separator: ' ',
+ separator1: ' '
+ }, {
+ options: [
+ { name: 'selector_separator_newline', value: 'false' },
+ { name: 'selector_separator', value: '" "' }
+ ],
+ // BUG: #713
+ separator: ' ',
+ separator1: ' '
+ }, {
+ options: [
+ { name: 'selector_separator_newline', value: 'true' },
+ { name: 'selector_separator', value: '" "' }
+ ],
+ separator: '\\n',
+ separator1: '\\n\\t'
+ }, {
+ options: [
+ { name: 'selector_separator_newline', value: 'true' },
+ { name: 'selector_separator', value: '" "' }
+ ],
+ separator: '\\n',
+ separator1: '\\n\\t'
+ }],
+ tests: [
+ { input: '#bla, #foo{color:green}', output: '#bla,{{separator}}#foo {\n\tcolor: green\n}' },
+ { input: '@media print {.tab{}}', output: '@media print {\n\t.tab {}\n}' },
+ { input: '@media print {.tab,.bat{}}', output: '@media print {\n\t.tab,{{separator1}}.bat {}\n}' },
+ { input: '#bla, #foo{color:black}', output: '#bla,{{separator}}#foo {\n\tcolor: black\n}' }, {
+ input: 'a:first-child,a:first-child{color:red;div:first-child,div:hover{color:black;}}',
+ output: 'a:first-child,{{separator}}a:first-child {\n\tcolor: red;\n\tdiv:first-child,{{separator1}}div:hover {\n\t\tcolor: black;\n\t}\n}'
+ }
+ ]
+ }, {
+ name: "Preserve Newlines",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "preserve_newlines", value: "true" }
+ ],
+ separator_input: '\\n\\n',
+ separator_output: '\\n\\n',
+ }, {
+ options: [
+ { name: "preserve_newlines", value: "false" }
+ ],
+ separator_input: '\\n\\n',
+ separator_output: '\\n',
+ }],
+ tests: [
+ { input: '.div {}{{separator_input}}.span {}', output: '.div {}{{separator_output}}.span {}' },
+ { input: '#bla, #foo{\n\tcolor:black;{{separator_input}}\tfont-size: 12px;\n}', output: '#bla,\n#foo {\n\tcolor: black;{{separator_output}}\tfont-size: 12px;\n}' }
+ ],
+ },
+ {
+ name: "Preserve Newlines and newline_between_rules",
+ description: "",
+ options: [
+ { name: "preserve_newlines", value: "true" },
+ { name: "newline_between_rules", value: "true" }
+ ],
+ tests: [
+ { input: '.div {}.span {}', output: '.div {}\n\n.span {}' },
+ { input: '#bla, #foo{\n\tcolor:black;\n\tfont-size: 12px;\n}', output: '#bla,\n#foo {\n\tcolor: black;\n\tfont-size: 12px;\n}' },
+ { input: '#bla, #foo{\n\tcolor:black;\n\n\n\tfont-size: 12px;\n}', output: '#bla,\n#foo {\n\tcolor: black;\n\n\n\tfont-size: 12px;\n}' },
+ { unchanged: '#bla,\n\n#foo {\n\tcolor: black;\n\tfont-size: 12px;\n}' },
+ { unchanged: 'a {\n\tb: c;\n\n\n\td: {\n\t\te: f;\n\t}\n}' },
+ { unchanged: '.div {}\n\n.span {}' },
+ { unchanged: '.div {\n\ta: 1;\n\n\n\tb: 2;\n}\n\n\n\n.span {\n\ta: 1;\n}' },
+ { unchanged: '.div {\n\n\n\ta: 1;\n\n\n\tb: 2;\n}\n\n\n\n.span {\n\ta: 1;\n}' },
+ { unchanged: '@media screen {\n\t.div {\n\t\ta: 1;\n\n\n\t\tb: 2;\n\t}\n\n\n\n\t.span {\n\t\ta: 1;\n\t}\n}\n\n.div {}\n\n.span {}' },
+ ],
+ }, {
+ name: "Preserve Newlines and add tabs",
+ options: [{ name: "preserve_newlines", value: "true" }],
+ description: "",
+ tests: [{
+ input: '.tool-tip {\n\tposition: relative;\n\n\t\t\n\t.tool-tip-content {\n\t\t&>* {\n\t\t\tmargin-top: 0;\n\t\t}\n\t\t\n\n\t\t.mixin-box-shadow(.2rem .2rem .5rem rgba(0, 0, 0, .15));\n\t\tpadding: 1rem;\n\t\tposition: absolute;\n\t\tz-index: 10;\n\t}\n}',
+ output: '.tool-tip {\n\tposition: relative;\n\n\n\t.tool-tip-content {\n\t\t&>* {\n\t\t\tmargin-top: 0;\n\t\t}\n\\n\\n\t\t.mixin-box-shadow(.2rem .2rem .5rem rgba(0, 0, 0, .15));\n\t\tpadding: 1rem;\n\t\tposition: absolute;\n\t\tz-index: 10;\n\t}\n}'
+ }],
+ }, {
+ name: "Newline Between Rules",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "newline_between_rules", value: "true" }
+ ],
+ separator: '\\n'
+ }, {
+ options: [
+ { name: "newline_between_rules", value: "false" }
+ ],
+ separator: ''
+ }],
+ tests: [
+ { input: '.div {}\n.span {}', output: '.div {}\n{{separator}}.span {}' },
+ { input: '.div{}\n \n.span{}', output: '.div {}\n{{separator}}.span {}' },
+ { input: '.div {} \n \n.span { } \n', output: '.div {}\n{{separator}}.span {}' },
+ { input: '.div {\n \n} \n .span {\n } ', output: '.div {}\n{{separator}}.span {}' },
+ { input: '.selector1 {\n\tmargin: 0; /* This is a comment including an url http://domain.com/path/to/file.ext */\n}\n.div{height:15px;}', output: '.selector1 {\n\tmargin: 0;\n\t/* This is a comment including an url http://domain.com/path/to/file.ext */\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ { input: '.tabs{width:10px;//end of line comment\nheight:10px;//another\n}\n.div{height:15px;}', output: '.tabs {\n\twidth: 10px; //end of line comment\n\theight: 10px; //another\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ { input: '#foo {\n\tbackground-image: url(foo@2x.png);\n\t@font-face {\n\t\tfont-family: "Bitstream Vera Serif Bold";\n\t\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n\t}\n}\n.div{height:15px;}', output: '#foo {\n\tbackground-image: url(foo@2x.png);\n\t@font-face {\n\t\tfont-family: "Bitstream Vera Serif Bold";\n\t\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n\t}\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ { input: '@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo@2x.png);\n\t}\n\t@font-face {\n\t\tfont-family: "Bitstream Vera Serif Bold";\n\t\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n\t}\n}\n.div{height:15px;}', output: '@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo@2x.png);\n\t}\n\t@font-face {\n\t\tfont-family: "Bitstream Vera Serif Bold";\n\t\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n\t}\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ { input: '@font-face {\n\tfont-family: "Bitstream Vera Serif Bold";\n\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n}\n@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo.png);\n\t}\n\t@media screen and (min-device-pixel-ratio: 2) {\n\t\t@font-face {\n\t\t\tfont-family: "Helvetica Neue"\n\t\t}\n\t\t#foo:hover {\n\t\t\tbackground-image: url(foo@2x.png);\n\t\t}\n\t}\n}', output: '@font-face {\n\tfont-family: "Bitstream Vera Serif Bold";\n\tsrc: url("http://developer.mozilla.org/@api/deki/files/2934/=VeraSeBd.ttf");\n}\n{{separator}}@media screen {\n\t#foo:hover {\n\t\tbackground-image: url(foo.png);\n\t}\n\t@media screen and (min-device-pixel-ratio: 2) {\n\t\t@font-face {\n\t\t\tfont-family: "Helvetica Neue"\n\t\t}\n\t\t#foo:hover {\n\t\t\tbackground-image: url(foo@2x.png);\n\t\t}\n\t}\n}' },
+ { input: 'a:first-child{color:red;div:first-child{color:black;}}\n.div{height:15px;}', output: 'a:first-child {\n\tcolor: red;\n\tdiv:first-child {\n\t\tcolor: black;\n\t}\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ { input: 'a:first-child{color:red;div:not(.peq){color:black;}}\n.div{height:15px;}', output: 'a:first-child {\n\tcolor: red;\n\tdiv:not(.peq) {\n\t\tcolor: black;\n\t}\n}\n{{separator}}.div {\n\theight: 15px;\n}' },
+ ],
+ }, {
+ name: "Functions braces",
+ description: "",
+ tests: [
+ { input: '.tabs(){}', output: '.tabs() {}' },
+ { input: '.tabs (){}', output: '.tabs () {}' },
+ { input: '.tabs (pa, pa(1,2)), .cols { }', output: '.tabs (pa, pa(1, 2)),\n.cols {}' },
+ { input: '.tabs(pa, pa(1,2)), .cols { }', output: '.tabs(pa, pa(1, 2)),\n.cols {}' },
+ { input: '.tabs ( ) { }', output: '.tabs () {}' },
+ { input: '.tabs( ) { }', output: '.tabs() {}' },
+ { input: '.tabs (t, t2) \n{\n key: val(p1 ,p2); \n }', output: '.tabs (t, t2) {\n\tkey: val(p1, p2);\n}' },
+ { unchanged: '.box-shadow(@shadow: 0 1px 3px rgba(0, 0, 0, .25)) {\n\t-webkit-box-shadow: @shadow;\n\t-moz-box-shadow: @shadow;\n\tbox-shadow: @shadow;\n}' }
+ ],
+ }, {
+ name: "Comments",
+ description: "",
+ tests: [
+ { unchanged: '/* test */' },
+ { input: '.tabs{/* test */}', output: '.tabs {\n\t/* test */\n}' },
+ { input: '.tabs{/* test */}', output: '.tabs {\n\t/* test */\n}' },
+ { input: '/* header */.tabs {}', output: '/* header */\n\n.tabs {}' },
+ { input: '.tabs {\n/* non-header */\nwidth:10px;}', output: '.tabs {\n\t/* non-header */\n\twidth: 10px;\n}' },
+ { unchanged: '/* header' },
+ { unchanged: '// comment' }, {
+ input: '.selector1 {\n\tmargin: 0; /* This is a comment including an url http://domain.com/path/to/file.ext */\n}',
+ output: '.selector1 {\n\tmargin: 0;\n\t/* This is a comment including an url http://domain.com/path/to/file.ext */\n}'
+ },
+
+ {
+ comment: "single line comment support (less/sass)",
+ input: '.tabs{\n// comment\nwidth:10px;\n}',
+ output: '.tabs {\n\t// comment\n\twidth: 10px;\n}'
+ },
+ { input: '.tabs{// comment\nwidth:10px;\n}', output: '.tabs {\n\t// comment\n\twidth: 10px;\n}' },
+ { input: '//comment\n.tabs{width:10px;}', output: '//comment\n.tabs {\n\twidth: 10px;\n}' },
+ { input: '.tabs{//comment\n//2nd single line comment\nwidth:10px;}', output: '.tabs {\n\t//comment\n\t//2nd single line comment\n\twidth: 10px;\n}' },
+ { input: '.tabs{width:10px;//end of line comment\n}', output: '.tabs {\n\twidth: 10px; //end of line comment\n}' },
+ { input: '.tabs{width:10px;//end of line comment\nheight:10px;}', output: '.tabs {\n\twidth: 10px; //end of line comment\n\theight: 10px;\n}' },
+ { input: '.tabs{width:10px;//end of line comment\nheight:10px;//another\n}', output: '.tabs {\n\twidth: 10px; //end of line comment\n\theight: 10px; //another\n}' }
+ ],
+ }, {
+ name: "Handle LESS property name interpolation",
+ description: "",
+ tests: [
+ { unchanged: 'tag {\n\t@{prop}: none;\n}' },
+ { input: 'tag{@{prop}:none;}', output: 'tag {\n\t@{prop}: none;\n}' },
+ { input: 'tag{ @{prop}: none;}', output: 'tag {\n\t@{prop}: none;\n}' },
+ {
+ comment: "can also be part of property name",
+ unchanged: 'tag {\n\tdynamic-@{prop}: none;\n}'
+ },
+ { input: 'tag{dynamic-@{prop}:none;}', output: 'tag {\n\tdynamic-@{prop}: none;\n}' },
+ { input: 'tag{ dynamic-@{prop}: none;}', output: 'tag {\n\tdynamic-@{prop}: none;\n}' },
+ ],
+ }, {
+ name: "Handle LESS property name interpolation, test #631",
+ description: "",
+ tests: [
+ { unchanged: '.generate-columns(@n, @i: 1) when (@i =< @n) {\n\t.column-@{i} {\n\t\twidth: (@i * 100% / @n);\n\t}\n\t.generate-columns(@n, (@i + 1));\n}' },
+ {
+ input: '.generate-columns(@n,@i:1) when (@i =< @n){.column-@{i}{width:(@i * 100% / @n);}.generate-columns(@n,(@i + 1));}',
+ output: '.generate-columns(@n, @i: 1) when (@i =< @n) {\n\t.column-@{i} {\n\t\twidth: (@i * 100% / @n);\n\t}\n\t.generate-columns(@n, (@i + 1));\n}'
+ }
+ ],
+ }, {
+ name: "Psuedo-classes vs Variables",
+ description: "",
+ tests: [
+ { unchanged: '@page :first {}' }, {
+ comment: "Assume the colon goes with the @name. If we're in LESS, this is required regardless of the at-string.",
+ input: '@page:first {}',
+ output: '@page: first {}'
+ },
+ { unchanged: '@page: first {}' }
+ ],
+ }, {
+ name: "SASS/SCSS",
+ description: "",
+ tests: [{
+ comment: "Basic Interpolation",
+ unchanged: 'p {\n\t$font-size: 12px;\n\t$line-height: 30px;\n\tfont: #{$font-size}/#{$line-height};\n}'
+ },
+ { unchanged: 'p.#{$name} {}' }, {
+ unchanged: [
+ '@mixin itemPropertiesCoverItem($items, $margin) {',
+ '\twidth: calc((100% - ((#{$items} - 1) * #{$margin}rem)) / #{$items});',
+ '\tmargin: 1.6rem #{$margin}rem 1.6rem 0;',
+ '}'
+ ]
+ },
+ {
+ comment: "Multiple filed issues in LESS due to not(:blah)",
+ unchanged: '&:first-of-type:not(:last-child) {}'
+ },
+ {
+ unchanged: [
+ 'div {',
+ '\t&:not(:first-of-type) {',
+ '\t\tbackground: red;',
+ '\t}',
+ '}',
+ ]
+ }
+
+ ],
+ }, {
+ name: "Proper handling of colon in selectors",
+ description: "Space before a colon in a selector must be preserved, as it means pseudoclass/pseudoelement on any child",
+ options: [{ name: "selector_separator_newline", value: "false" }],
+ tests: [
+ { unchanged: 'a :b {}' },
+ { unchanged: 'a ::b {}' },
+ { unchanged: 'a:b {}' },
+ { unchanged: 'a::b {}' },
+ {
+ input: 'a {}, a::b {}, a ::b {}, a:b {}, a :b {}',
+ output: 'a {}\n, a::b {}\n, a ::b {}\n, a:b {}\n, a :b {}'
+ },
+ {
+ unchanged: [
+ '.card-blue ::-webkit-input-placeholder {',
+ '\tcolor: #87D1FF;',
+ '}'
+ ]
+ },
+ {
+ unchanged: [
+ 'div [attr] :not(.class) {',
+ '\tcolor: red;',
+ '}'
+ ]
+ }
+ ]
+ }, {
+ name: "Regresssion Tests",
+ description: "General Regression tests for known issues",
+ options: [{ name: "selector_separator_newline", value: "false" }],
+ tests: [{
+ unchanged: [
+ '@media(min-width:768px) {',
+ '\t.selector::after {',
+ '\t\t/* property: value */',
+ '\t}',
+ '\t.other-selector {',
+ '\t\t/* property: value */',
+ '\t}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ '.fa-rotate-270 {',
+ '\tfilter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);',
+ '}'
+ ]
+ }]
+ }, {
+
+ }
+ ]
+};
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/data/html/node.mustache b/node_modules/js-beautify/test/data/html/node.mustache
new file mode 100644
index 0000000..68d2769
--- /dev/null
+++ b/node_modules/js-beautify/test/data/html/node.mustache
@@ -0,0 +1,378 @@
+/*
+{{&header_text}}
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+/*jshint unused:false */
+
+function run_html_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_beautify)
+{
+
+ var default_opts = {
+ indent_size: 4,
+ indent_char: ' ',
+ preserve_newlines: true,
+ jslint_happy: false,
+ keep_array_indentation: false,
+ brace_style: 'collapse',
+ space_before_conditional: true,
+ break_chained_methods: false,
+ selector_separator: '\n',
+ end_with_newline: false
+ };
+ var opts;
+
+{{#default_options}} default_opts.{{name}} = {{&value}};
+{{/default_options}}
+
+ function reset_options()
+ {
+ opts = JSON.parse(JSON.stringify(default_opts));
+ }
+
+ function test_html_beautifier(input)
+ {
+ return html_beautify(input, opts);
+ }
+
+ var sanitytest;
+
+ // test the input on beautifier with the current flag settings
+ // does not check the indentation / surroundings as bt() does
+ function test_fragment(input, expected)
+ {
+ expected = expected || expected === '' ? expected : input;
+ sanitytest.expect(input, expected);
+ // if the expected is different from input, run it again
+ // expected output should be unchanged when run twice.
+ if (expected !== input) {
+ sanitytest.expect(expected, expected);
+ }
+
+ // Everywhere we do newlines, they should be replaced with opts.eol
+ opts.eol = '\r\n';
+ expected = expected.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ if (input.indexOf('\n') !== -1) {
+ input = input.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ // Ensure support for auto eol detection
+ opts.eol = 'auto';
+ sanitytest.expect(input, expected);
+ }
+ opts.eol = '\n';
+ }
+
+ // test html
+ function bth(input, expectation)
+ {
+ var wrapped_input, wrapped_expectation, field_input, field_expectation;
+
+ expectation = expectation || expectation === '' ? expectation : input;
+ sanitytest.test_function(test_html_beautifier, 'html_beautify');
+ test_fragment(input, expectation);
+
+ if (opts.indent_size === 4 && input) {
+ wrapped_input = '\n' + input.replace(/^(.+)$/mg, ' $1') + '\n inline \n
';
+ wrapped_expectation = '\n' + expectation.replace(/^(.+)$/mg, ' $1') + '\n inline \n
';
+ test_fragment(wrapped_input, wrapped_expectation);
+ }
+ }
+
+ function unicode_char(value) {
+ return String.fromCharCode(value);
+ }
+
+ function beautifier_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ bth('');
+
+{{#groups}}{{#set_mustache_tags}}.{{/set_mustache_tags}}
+ //============================================================
+ {{^matrix}}
+ // {{&name}}
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+ {{#matrix}}
+ // {{&name}} - ({{#matrix_context_string}}.{{/matrix_context_string}})
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+{{#unset_mustache_tags}}.{{/unset_mustache_tags}}{{/groups}}
+ }
+
+ function beautifier_unconverted_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ opts.end_with_newline = true;
+ test_fragment('', '\n');
+ test_fragment('
\n');
+ test_fragment('
\n\n\n', '
\n');
+ test_fragment('\n' +
+ ' \n' +
+ '\n');
+
+
+ opts.end_with_newline = false;
+ // error cases need love too
+ bth(' ');
+ bth("
+
+ test_fragment(
+ '\n' +
+ ' \n' +
+ '');
+
+ test_fragment('
\n', '
');
+ bth('
');
+ bth('content
');
+ bth('',
+ '');
+ bth('',
+ '\n' +
+ '
content
\n' +
+ '
');
+ bth('\n' +
+ ' content \n' +
+ '
');
+ bth('\n' +
+ '
');
+ bth('\n' +
+ ' content\n' +
+ '
');
+ bth('\n' +
+ '
',
+ '\n' +
+ '
');
+ bth(' \n' +
+ '
',
+ '\n' +
+ '
');
+ bth('\n' +
+ '
\n' +
+ ' \n' +
+ '
',
+ '\n' +
+ '
\n' +
+ '\n' +
+ '
');
+ bth(' \n' +
+ '
',
+ '\n' +
+ '
');
+ bth('content
',
+ 'content
');
+ bth('
',
+ '
');
+ bth('content\n' +
+ ' \n' +
+ '
\n' +
+ 'content',
+ 'content\n' +
+ '\n' +
+ '
\n' +
+ 'content');
+ bth(' \n' +
+ ' \n' +
+ '
\n' +
+ ' ');
+ bth('\n' +
+ '\n' +
+ '
\n' +
+ ' ',
+ '\n' +
+ ' \n' +
+ '
\n' +
+ ' ');
+ bth('\n' +
+ ' content\n' +
+ ' \n' +
+ '\n' +
+ ' content\n' +
+ ' ');
+
+ bth(' content');
+ bth(' content');
+ bth(' content', ' content');
+
+ bth(' content');
+ bth(' content');
+ bth(' content', ' content');
+
+ bth('content ');
+ bth(' content ');
+ bth(' content ', ' content ');
+
+ bth('content
content
');
+ bth(' content
content
');
+ bth(' content
content
',
+ ' content
content
');
+ bth('Text Link Text');
+
+ var unformatted = opts.unformatted;
+ opts.unformatted = ['script', 'style'];
+ bth('');
+ bth('');
+ opts.unformatted = unformatted;
+
+ unformatted = opts.unformatted;
+ opts.unformatted = ['custom-element'];
+ test_fragment('should not ' +
+ ' insert newlines
',
+ 'should not ' +
+ ' insert newlines
');
+ opts.unformatted = unformatted;
+
+ // Tests that don't pass, but probably should.
+ // bth('content
');
+
+ // Handlebars tests
+ // Without the indent option on, handlebars are treated as content.
+
+ opts.wrap_line_length = 0;
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all.
');
+
+ // A value of 0 means no max line length, and should not wrap.
+ //...---------1---------2---------3---------4---------5---------6---------7---------8---------9--------10--------11--------12--------13--------14--------15--------16--------17--------18--------19--------20--------21--------22--------23--------24--------25--------26--------27--------28--------29
+ //...12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
');
+
+ opts.wrap_line_length = "0";
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all.
');
+
+ // A value of "0" means no max line length, and should not wrap
+ //...---------1---------2---------3---------4---------5---------6---------7---------8---------9--------10--------11--------12--------13--------14--------15--------16--------17--------18--------19--------20--------21--------22--------23--------24--------25--------26--------27--------28--------29
+ //...12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
',
+ /* expected */
+ 'Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all. Some text that should not wrap at all.
');
+
+ //BUGBUG: This should wrap before 40 not after.
+ opts.wrap_line_length = 40;
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some test text that should wrap_inside_this section here.
',
+ /* expected */
+ 'Some test text that should wrap_inside_this\n' +
+ ' section here.
');
+
+ opts.wrap_line_length = "40";
+ //...---------1---------2---------3---------4---------5---------6---------7
+ //...1234567890123456789012345678901234567890123456789012345678901234567890
+ bth('Some test text that should wrap_inside_this section here.
',
+ /* expected */
+ 'Some test text that should wrap_inside_this\n' +
+ ' section here.
');
+
+ opts.indent_size = 1;
+ opts.indent_char = '\t';
+ opts.preserve_newlines = false;
+ bth('\n\tfoo\n
', ' foo
');
+
+ opts.preserve_newlines = true;
+ bth('\n\tfoo\n
');
+
+
+
+ // test preserve_newlines and max_preserve_newlines
+ opts.preserve_newlines = false;
+ bth('Should not
\n\n\n' +
+ 'preserve newlines
',
+ 'Should not
\n' +
+ 'preserve newlines
');
+
+ opts.preserve_newlines = true;
+ opts.max_preserve_newlines = 0;
+ bth('Should
\n\n\n' +
+ 'preserve zero newlines
',
+ 'Should
\n' +
+ 'preserve zero newlines
');
+
+ opts.max_preserve_newlines = 1;
+ bth('Should
\n\n\n' +
+ 'preserve one newline
',
+ 'Should
\n\n' +
+ 'preserve one newline
');
+
+ opts.max_preserve_newlines = null;
+ bth('Should
\n\n\n' +
+ 'preserve one newline
',
+ 'Should
\n\n\n' +
+ 'preserve one newline
');
+ }
+
+ beautifier_tests();
+ beautifier_unconverted_tests();
+}
+
+if (typeof exports !== "undefined") {
+ exports.run_html_tests = run_html_tests;
+}
diff --git a/node_modules/js-beautify/test/data/html/tests.js b/node_modules/js-beautify/test/data/html/tests.js
new file mode 100644
index 0000000..9597ecb
--- /dev/null
+++ b/node_modules/js-beautify/test/data/html/tests.js
@@ -0,0 +1,1089 @@
+/*
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+
+exports.test_data = {
+ default_options: [
+ { name: "indent_size", value: "4" },
+ { name: "indent_char", value: "' '" },
+ { name: "indent_with_tabs", value: "false" },
+ { name: "preserve_newlines", value: "true" },
+ { name: "jslint_happy", value: "false" },
+ { name: "keep_array_indentation", value: "false" },
+ { name: "brace_style", value: "'collapse'" },
+ { name: "extra_liners", value: "['html', 'head', '/html']" }
+ ],
+ groups: [{
+ name: "Handle inline and block elements differently",
+ description: "",
+ matrix: [{}],
+ tests: [{
+ fragment: true,
+ input: 'Block ',
+ output: [
+ '',
+ ' Block ',
+ ''
+ ]
+ }, {
+ fragment: true,
+ unchanged: 'Inline '
+ }]
+ }, {
+ name: "End With Newline",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "end_with_newline", value: "true" }
+ ],
+ eof: '\n'
+ }, {
+ options: [
+ { name: "end_with_newline", value: "false" }
+ ],
+ eof: ''
+ }
+
+ ],
+ tests: [
+ { fragment: true, input: '', output: '{{eof}}' },
+ { fragment: true, input: '
', output: '
{{eof}}' },
+ // { fragment: true, input: ' \n\n
\n\n\n\n', output: '
{{eof}}' },
+ { fragment: true, input: '\n', output: '{{eof}}' }
+ ],
+ }, {
+ name: "Custom Extra Liners (empty)",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "extra_liners", value: "[]" }
+ ]
+ },
+
+ ],
+ tests: [{
+ fragment: true,
+ input: ' ',
+ output: '\n\n \n\n\n \n\n'
+ }],
+ }, {
+ name: "Custom Extra Liners (default)",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "extra_liners", value: "null" }
+ ]
+ },
+
+ ],
+ tests: [{
+ fragment: true,
+ input: '',
+ output: '\n\n\n\n\n\n'
+ }],
+ }, {
+ name: "Custom Extra Liners (p, string)",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "extra_liners", value: "'p,/p'" }
+ ]
+ },
+
+ ],
+ tests: [{
+ fragment: true,
+ input: ' ',
+ output: '\n\n \n\n\n \n\n'
+ }],
+ }, {
+ name: "Custom Extra Liners (p)",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "extra_liners", value: "['p', '/p']" }
+ ]
+ },
+
+ ],
+ tests: [{
+ fragment: true,
+ input: ' ',
+ output: '\n\n \n\n\n \n\n'
+ }],
+ }, {
+ name: "Tests for script and style types (issue 453, 821)",
+ description: "Only format recognized script types",
+ tests: [{
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ }, {
+ input: '',
+ output: [
+ ''
+ ]
+ },
+
+ ],
+ }, {
+ name: "Attribute Wrap alignment with spaces",
+ description: "Ensure attributes are internally aligned with spaces when the indent_character is set to tab",
+ matrix: [{
+ options: [
+ { name: "wrap_attributes", value: "'force-aligned'" },
+ { name: "indent_with_tabs", value: "true" }
+ ]
+ }],
+ tests: [{
+ fragment: true,
+ input: '',
+ output: ''
+ }]
+ }, {
+ name: "Attribute Wrap de-indent",
+ description: "Tags de-indent when attributes are wrapped",
+ matrix: [{
+ options: [
+ { name: "wrap_attributes", value: "'force-aligned'" },
+ { name: "indent_with_tabs", value: "false" }
+ ]
+ }],
+ tests: [{
+ fragement: true,
+ input: '',
+ output: ''
+ }]
+ }, {
+ name: "Attribute Wrap",
+ description: "Wraps attributes inside of html tags",
+ matrix: [{
+ options: [
+ { name: "wrap_attributes", value: "'force'" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force'" },
+ { name: "wrap_line_length", value: "80" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force'" },
+ { name: "wrap_attributes_indent_size", value: "8" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'auto'" },
+ { name: "wrap_line_length", value: "80" },
+ { name: "wrap_attributes_indent_size", value: "0" }
+ ],
+ indent_attr: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n'
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'auto'" },
+ { name: "wrap_line_length", value: "80" },
+ { name: "wrap_attributes_indent_size", value: "4" }
+ ],
+ indent_attr: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'auto'" },
+ { name: "wrap_line_length", value: "0" }
+ ],
+ indent_attr: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: ' '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-aligned'" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_faligned: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-aligned'" },
+ { name: "wrap_line_length", value: "80" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_faligned: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-aligned'" },
+ { name: "wrap_attributes_indent_size", value: "8" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_faligned: ' ',
+ indent_attr_first: ' ',
+ indent_end: '',
+ indent_end_selfclosing: ' ',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-expand-multiline'" },
+ { name: "wrap_attributes_indent_size", value: "4" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: '\n ',
+ indent_end: '\n',
+ indent_end_selfclosing: '\n',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-expand-multiline'" },
+ { name: "wrap_attributes_indent_size", value: "4" },
+ { name: "wrap_line_length", value: "80" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: '\n ',
+ indent_end: '\n',
+ indent_end_selfclosing: '\n',
+ indent_over80: '\n '
+ }, {
+ options: [
+ { name: "wrap_attributes", value: "'force-expand-multiline'" },
+ { name: "wrap_attributes_indent_size", value: "8" }
+ ],
+ indent_attr: '\n ',
+ indent_attr_first: '\n ',
+ indent_end: '\n',
+ indent_end_selfclosing: '\n',
+ indent_over80: '\n '
+ }],
+ tests: [{
+ fragment: true,
+ input: 'This is some text
',
+ output: 'This is some text
'
+ }, {
+ fragment: true,
+ input: 'This is some text
',
+ output: 'This is some text
'
+ }, {
+ fragment: true,
+ input: 'This is some text
',
+ output: 'This is some text
'
+ }, {
+ fragment: true,
+ input: 'This is some text
',
+ output: 'This is some text
'
+ }, {
+ fragment: true,
+ input: ' ',
+ output: ' '
+ }, {
+ fragment: true,
+ input: ' ',
+ output: '\n '
+ }, {
+ fragment: true,
+ input: ' ',
+ output: ' '
+ }]
+ }, {
+ name: "Handlebars Indenting Off",
+ description: "Test handlebar behavior when indenting is off",
+ template: "^^^ $$$",
+ options: [
+ { name: "indent_handlebars", value: "false" }
+ ],
+ tests: [{
+ fragment: true,
+ input_: '{{#if 0}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}',
+ output: '{{#if 0}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ input_: '\n' +
+ '{{#each thing}}\n' +
+ ' {{name}}\n' +
+ '{{/each}}\n' +
+ '
',
+ output: '\n' +
+ ' {{#each thing}} {{name}} {{/each}}\n' +
+ '
'
+ }
+
+ ]
+ }, {
+ name: "Handlebars Indenting On",
+ description: "Test handlebar formatting",
+ template: "^^^ $$$",
+ matrix: [{
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{field}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{! comment}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{!-- comment--}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{pre{{field1}} {{field2}} {{field3}}post'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{! \n mult-line\ncomment \n with spacing\n}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{!-- \n mult-line\ncomment \n with spacing\n--}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ content: '{{!-- \n mult-line\ncomment \n{{#> component}}\n mult-line\ncomment \n with spacing\n {{/ component}}--}}'
+ }, {
+ options: [
+ { name: "indent_handlebars", value: "true" },
+ { name: "wrap_line_length", value: "80" }
+ ],
+ content: 'content'
+ }],
+ tests: [
+ { fragment: true, unchanged: '{{page-title}}' },
+ { fragment: true, unchanged: '{{#if 0}}{{/if}}' },
+ { fragment: true, unchanged: '{{#if 0}}^^^&content$$${{/if}}' },
+ { fragment: true, unchanged: '{{#if 0}}\n{{/if}}' }, {
+ fragment: true,
+ input_: '{{#if words}}{{/if}}',
+ output: '{{#if words}}{{/if}}'
+ }, {
+ fragment: true,
+ input_: '{{#if words}}^^^&content$$${{/if}}',
+ output: '{{#if words}}^^^&content$$${{/if}}'
+ }, {
+ fragment: true,
+ input_: '{{#if words}}^^^&content$$${{/if}}',
+ output: '{{#if words}}^^^&content$$${{/if}}'
+ }, {
+ fragment: true,
+ unchanged: '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ input_: '{{#if 1}}\n' +
+ '\n' +
+ '
\n' +
+ '{{/if}}',
+ output: '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ unchanged: '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
'
+ }, {
+ fragment: true,
+ input_: '\n' +
+ '{{#if 1}}\n' +
+ '{{/if}}\n' +
+ '
',
+ output: '\n' +
+ ' {{#if 1}}\n' +
+ ' {{/if}}\n' +
+ '
'
+ }, {
+ fragment: true,
+ input_: '{{#if}}\n' +
+ '{{#each}}\n' +
+ '{{#if}}\n' +
+ '^^^&content$$$\n' +
+ '{{/if}}\n' +
+ '{{#if}}\n' +
+ '^^^&content$$$\n' +
+ '{{/if}}\n' +
+ '{{/each}}\n' +
+ '{{/if}}',
+ output: '{{#if}}\n' +
+ ' {{#each}}\n' +
+ ' {{#if}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{/if}}\n' +
+ ' {{#if}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{/if}}\n' +
+ ' {{/each}}\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ unchanged: '{{#if 1}}\n' +
+ ' \n' +
+ '
\n' +
+ '{{/if}}'
+ },
+
+ // Test {{else}} aligned with {{#if}} and {{/if}}
+ {
+ fragment: true,
+ input_: '{{#if 1}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{else}}\n' +
+ ' ^^^&content$$$\n' +
+ '{{/if}}',
+ output: '{{#if 1}}\n' +
+ ' ^^^&content$$$\n' +
+ '{{else}}\n' +
+ ' ^^^&content$$$\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ input_: '{{#if 1}}\n' +
+ ' {{else}}\n' +
+ ' {{/if}}',
+ output: '{{#if 1}}\n' +
+ '{{else}}\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ input_: '{{#if thing}}\n' +
+ '{{#if otherthing}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{else}}\n' +
+ '^^^&content$$$\n' +
+ ' {{/if}}\n' +
+ ' {{else}}\n' +
+ '^^^&content$$$\n' +
+ '{{/if}}',
+ output: '{{#if thing}}\n' +
+ ' {{#if otherthing}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{else}}\n' +
+ ' ^^^&content$$$\n' +
+ ' {{/if}}\n' +
+ '{{else}}\n' +
+ ' ^^^&content$$$\n' +
+ '{{/if}}'
+ },
+ // Test {{}} inside of <> tags, which should be separated by spaces
+ // for readability, unless they are inside a string.
+ {
+ fragment: true,
+ input_: '
',
+ output: '
'
+ }, {
+ fragment: true,
+ input_: '^^^&content$$$
',
+ output: '^^^&content$$$
'
+ }, {
+ fragment: true,
+ input_: '^^^&content$$$
',
+ output: '^^^&content$$$
'
+ }, {
+ fragment: true,
+ input_: '^^^&content$$$ ',
+ output: '^^^&content$$$ '
+ }, {
+ fragment: true,
+ unchanged: '^^^&content$$$
'
+ }, {
+ fragment: true,
+ unchanged: '^^^&content$$$
'
+ },
+
+ // Quotes found inside of Handlebars expressions inside of quoted
+ // strings themselves should not be considered string delimiters.
+ {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ unchanged: '{{condition < 0 ? "result1" : "result2"}} '
+ }, {
+ fragment: true,
+ unchanged: '{{condition1 && condition2 && condition3 && condition4 < 0 ? "resForTrue" : "resForFalse"}} '
+ }
+ ],
+ }, {
+ name: "Handlebars Else tag indenting",
+ description: "Handlebar Else tags should be newlined after formatted tags",
+ template: "^^^ $$$",
+ options: [
+ { name: "indent_handlebars", value: "true" }
+ ],
+ tests: [{
+ fragment: true,
+ input_: '{{#if test}}
{{else}}
{{/if}}',
+ output: '{{#if test}}\n' +
+ '
\n' +
+ '{{else}}\n' +
+ '
\n' +
+ '{{/if}}'
+ }, {
+ fragment: true,
+ unchanged: '{{#if test}} {{else}} {{/if}}'
+ }]
+ }, {
+ name: "Unclosed html elements",
+ description: "Unclosed elements should not indent",
+ options: [],
+ tests: [
+ { fragment: true, unchanged: '\n' },
+ { fragment: true, unchanged: ' \n ' },
+ { fragment: true, unchanged: ' \n ' },
+ { fragment: true, unchanged: ' \n ' },
+ { fragment: true, unchanged: ' \n ' },
+ { fragment: true, unchanged: '\n \n \n ' }
+ ]
+ }, {
+ name: "Unformatted tags",
+ description: "Unformatted tag behavior",
+ options: [],
+ tests: [{
+ fragment: true,
+ input: '\n bc \n ',
+ output: [
+ '',
+ ' b',
+ ' c ',
+ ' ',
+ ' '
+ ]
+ },
+ { fragment: true, unchanged: '\n bc \n ' },
+ { fragment: true, unchanged: '' },
+ { fragment: true, unchanged: '
' },
+ { fragment: true, unchanged: '
' },
+ ]
+ }, {
+ name: "File starting with comment",
+ description: "Unformatted tag behavior",
+ options: [],
+ tests: [{
+ fragment: true,
+ unchanged: [
+ '',
+ '',
+ '',
+ '',
+ ' a span ',
+ '',
+ '',
+ ''
+ ]
+ }, ]
+ }, {
+ name: "Php formatting",
+ description: "Php () treated as comments.",
+ options: [],
+ tests: [{
+ fragment: true,
+ input: '',
+ output: '',
+ }, {
+ fragment: true,
+ unchanged: [
+ '");',
+ '}',
+ '?>'
+ ]
+ }, {
+ fragment: true,
+ unchanged: [
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ '',
+ ''
+ ]
+ }]
+ }, {
+ name: "Support simple language specific option inheritance/overriding",
+ description: "Support simple language specific option inheritance/overriding",
+ matrix: [{
+ options: [
+ { name: "js", value: "{ 'indent_size': 3 }" },
+ { name: "css", value: "{ 'indent_size': 5 }" }
+ ],
+ h: ' ',
+ c: ' ',
+ j: ' '
+ },
+ {
+ options: [
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 } }" }
+ ],
+ h: ' ',
+ c: ' ',
+ j: ' '
+ },
+ {
+ options: [
+ { name: "indent_size", value: "9" },
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 }, 'indent_size': 2}" },
+ { name: "js", value: "{ 'indent_size': 5 }" },
+ { name: "css", value: "{ 'indent_size': 3 }" }
+ ],
+ h: ' ',
+ c: ' ',
+ j: ' '
+ }
+ ],
+ tests: [{
+ fragment: true,
+ unchanged: [
+ '',
+ '{{h}}',
+ '{{h}}',
+ '',
+ ]
+ }, ]
+ }, {
+ name: "underscore.js formatting",
+ description: "underscore.js templates (<% ... %>) treated as comments.",
+ options: [],
+ tests: [{
+ fragment: true,
+ unchanged: [
+ '',
+ ' ',
+ '
'
+ ]
+ }, ]
+ }, {
+ name: "Indent with tabs",
+ description: "Use one tab instead of several spaces for indentation",
+ template: "^^^ $$$",
+ options: [
+ { name: "indent_with_tabs", value: "true" }
+ ],
+ tests: [{
+ fragment: true,
+ input_: '\n' +
+ '
\n' +
+ '
\n' +
+ '
',
+ output: '\n' +
+ '\t
\n' +
+ '\t
\n' +
+ '
'
+ }]
+ }, {
+ name: "Indent without tabs",
+ description: "Use several spaces for indentation",
+ template: "^^^ $$$",
+ options: [
+ { name: "indent_with_tabs", value: "false" }
+ ],
+ tests: [{
+ fragment: true,
+ input_: '\n' +
+ '
\n' +
+ '
\n' +
+ '
',
+ output: '\n' +
+ '
\n' +
+ '
\n' +
+ '
'
+ }]
+ }, {
+ name: "Indent body inner html by default",
+ description: "",
+ tests: [{
+ fragment: true,
+ input: '\n\n
\n\n\n',
+ output: '\n\n
\n\n\n'
+ }]
+ }, {
+ name: "indent_body_inner_html set to false prevents indent of body inner html",
+ description: "",
+ options: [
+ { name: 'indent_body_inner_html', value: "false" }
+ ],
+ tests: [{
+ fragment: true,
+ unchanged: '\n\n
\n\n\n'
+ }]
+ }, {
+ name: "Indent head inner html by default",
+ description: "",
+ tests: [{
+ fragment: true,
+ input: '\n\n\n \n\n\n',
+ output: '\n\n\n \n\n\n'
+ }]
+ }, {
+ name: "indent_head_inner_html set to false prevents indent of head inner html",
+ description: "",
+ options: [
+ { name: 'indent_head_inner_html', value: "false" }
+ ],
+ tests: [{
+ fragment: true,
+ unchanged: '\n\n\n \n\n\n'
+ }]
+ }, {
+ name: "content_unformatted to prevent formatting content",
+ description: "",
+ options: [
+ { name: 'content_unformatted', value: "['script', 'style', 'p', 'span', 'br']" }
+ ],
+ tests: [{
+ fragment: true,
+ input: 'A ',
+ output: [
+ '',
+ '',
+ ' A ',
+ ' ',
+ ' ',
+ '',
+ '',
+ ''
+ ]
+ }, {
+ fragment: true,
+ input: '
But not me
',
+ output: [
+ '',
+ '
But not me
'
+ ]
+ }, {
+ fragment: true,
+ input: '
But not me
',
+ output: [
+ '',
+ '
But not me
'
+ ]
+ }, {
+ fragment: true,
+ unchanged: ''
+ }, {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ input: '',
+ output: [
+ '',
+ '
var a=1; var b=a; ',
+ '
'
+ ]
+ }, {
+ fragment: true,
+ input: '',
+ output: [
+ '',
+ '
',
+ ' var a=1; var b=a;',
+ ' ',
+ '
'
+ ]
+ }]
+ }, {
+ name: "default content_unformatted",
+ description: "",
+ options: [],
+ tests: [{
+ fragment: true,
+ input: 'A ',
+ output: [
+ '',
+ '',
+ ' A ',
+ ' ',
+ ' ',
+ '',
+ '',
+ ''
+ ]
+ }, {
+ fragment: true,
+ input: '
But not me
',
+ output: [
+ '',
+ '',
+ '
But not me
',
+ '',
+ ]
+ }, {
+ fragment: true,
+ input: '
But not me
',
+ output: [
+ '',
+ '',
+ '
But not me
',
+ ''
+ ]
+ }, {
+ fragment: true,
+ unchanged: ''
+ }, {
+ fragment: true,
+ unchanged: '
'
+ }, {
+ fragment: true,
+ input: '',
+ output: [
+ '',
+ '
var a=1;',
+ 'var b=a; ',
+ '
'
+ ]
+ }, {
+ fragment: true,
+ input: '',
+ output: [
+ '',
+ '
',
+ 'var a=1;',
+ 'var b=a;',
+ ' ',
+ '
'
+ ]
+ }]
+ }, {
+ name: "New Test Suite"
+ }],
+};
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/data/javascript/inputlib.js b/node_modules/js-beautify/test/data/javascript/inputlib.js
new file mode 100644
index 0000000..1017236
--- /dev/null
+++ b/node_modules/js-beautify/test/data/javascript/inputlib.js
@@ -0,0 +1,84 @@
+//--------//
+// Inputs //
+//--------//
+
+var operator_position = {
+ sanity: [
+ 'var res = a + b - c / d * e % f;',
+ 'var res = g & h | i ^ j;',
+ 'var res = (k && l || m) ? n : o;',
+ 'var res = p >> q << r >>> s;',
+ 'var res = t === u !== v != w == x >= y <= z > aa < ab;',
+ 'ac + -ad'
+ ],
+ comprehensive: [
+ 'var res = a + b',
+ '- c /',
+ 'd * e',
+ '%',
+ 'f;',
+ ' var res = g & h',
+ '| i ^',
+ 'j;',
+ 'var res = (k &&',
+ 'l',
+ '|| m) ?',
+ 'n',
+ ': o',
+ ';',
+ 'var res = p',
+ '>> q <<',
+ 'r',
+ '>>> s;',
+ 'var res',
+ ' = t',
+ '',
+ ' === u !== v',
+ ' !=',
+ 'w',
+ '== x >=',
+ 'y <= z > aa <',
+ 'ab;',
+ 'ac +',
+ '-ad'
+ ],
+ colon_special_case: [
+ 'var a = {',
+ ' b',
+ ': bval,',
+ ' c:',
+ 'cval',
+ ' ,d: dval',
+ '};',
+ 'var e = f ? g',
+ ': h;',
+ 'var i = j ? k :',
+ 'l;'
+ ],
+ catch_all: [
+ 'var d = 1;',
+ 'if (a === b',
+ ' && c) {',
+ ' d = (c * everything',
+ ' / something_else) %',
+ ' b;',
+ ' e',
+ ' += d;',
+ '',
+ '} else if (!(complex && simple) ||',
+ ' (emotion && emotion.name === "happy")) {',
+ ' cryTearsOfJoy(many ||',
+ ' anOcean',
+ ' || aRiver);',
+ '}'
+ ]
+};
+
+
+//---------//
+// Exports //
+//---------//
+
+module.exports = {
+ operator_position: operator_position
+};
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/data/javascript/node.mustache b/node_modules/js-beautify/test/data/javascript/node.mustache
new file mode 100644
index 0000000..db6f120
--- /dev/null
+++ b/node_modules/js-beautify/test/data/javascript/node.mustache
@@ -0,0 +1,1114 @@
+/*
+{{&header_text}}
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+/*jshint unused:false */
+
+function run_javascript_tests(test_obj, Urlencoded, js_beautify, html_beautify, css_beautify)
+{
+
+ var default_opts = {
+ indent_size: 4,
+ indent_char: ' ',
+ preserve_newlines: true,
+ jslint_happy: false,
+ keep_array_indentation: false,
+ brace_style: 'collapse',
+ space_before_conditional: true,
+ break_chained_methods: false,
+ selector_separator: '\n',
+ end_with_newline: false
+ };
+ var opts;
+
+{{#default_options}} default_opts.{{name}} = {{&value}};
+{{/default_options}}
+
+ function reset_options()
+ {
+ opts = JSON.parse(JSON.stringify(default_opts));
+ }
+
+ function test_js_beautifier(input)
+ {
+ return js_beautify(input, opts);
+ }
+
+ var sanitytest;
+
+ // test the input on beautifier with the current flag settings
+ // does not check the indentation / surroundings as bt() does
+ function test_fragment(input, expected)
+ {
+ expected = expected || expected === '' ? expected : input;
+ sanitytest.expect(input, expected);
+ // if the expected is different from input, run it again
+ // expected output should be unchanged when run twice.
+ if (expected !== input) {
+ sanitytest.expect(expected, expected);
+ }
+
+ // Everywhere we do newlines, they should be replaced with opts.eol
+ opts.eol = '\r\\n';
+ expected = expected.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ if (input.indexOf('\n') !== -1) {
+ input = input.replace(/[\n]/g, '\r\n');
+ sanitytest.expect(input, expected);
+ // Ensure support for auto eol detection
+ opts.eol = 'auto';
+ sanitytest.expect(input, expected);
+ }
+ opts.eol = '\n';
+ }
+
+
+
+ // test the input on beautifier with the current flag settings
+ // test both the input as well as { input } wrapping
+ function bt(input, expectation)
+ {
+ var wrapped_input, wrapped_expectation;
+
+ expectation = expectation || expectation === '' ? expectation : input;
+ sanitytest.test_function(test_js_beautifier, 'js_beautify');
+ test_fragment(input, expectation);
+
+ // If we set raw, input should be unchanged
+ opts.test_output_raw = true;
+ if (!opts.end_with_newline) {
+ test_fragment(input, input);
+ }
+ opts.test_output_raw = false;
+
+ // test also the returned indentation
+ // e.g if input = "asdf();"
+ // then test that this remains properly formatted as well:
+ // {
+ // asdf();
+ // indent;
+ // }
+
+ var current_indent_size = opts.js ? opts.js.indent_size : null;
+ current_indent_size = current_indent_size ? current_indent_size : opts.indent_size;
+ if (current_indent_size === 4 && input) {
+ wrapped_input = '{\n' + input.replace(/^(.+)$/mg, ' $1') + '\n foo = bar;\n}';
+ wrapped_expectation = '{\n' + expectation.replace(/^(.+)$/mg, ' $1') + '\n foo = bar;\n}';
+ test_fragment(wrapped_input, wrapped_expectation);
+
+ // If we set raw, input should be unchanged
+ opts.test_output_raw = true;
+ if (!opts.end_with_newline) {
+ test_fragment(wrapped_input, wrapped_input);
+ }
+ opts.test_output_raw = false;
+ }
+
+ }
+
+ // run all tests for the given brace style ("collapse", "expand", "end-expand", or "none").
+ // uses various whitespace combinations before and after opening and closing braces,
+ // respectively, for most of the tests' inputs.
+ function beautify_brace_tests(brace_style) {
+
+ var indent_on_wrap_str = ' '; // could use Array(opts.indent_size + 1).join(' '); if we wanted to replace _all_ of the hardcoded 4-space in the test and expectation strings
+
+ function permute_brace_tests(expect_open_white, expect_close_white) {
+
+ // run the tests that need permutation against a specific combination of
+ // pre-opening-brace and pre-closing-brace whitespace
+ function run_brace_permutation(test_open_white, test_close_white) {
+ var to = test_open_white,
+ tc = test_close_white,
+ eo = expect_open_white ? expect_open_white : to === '' ? ' ' : to,
+ ec = expect_close_white ? expect_close_white : tc === '' ? ' ' : tc,
+ i = eo === '\n' ? indent_on_wrap_str: '';
+
+ bt( '//case 1\nif (a == 1)' + to + '{}\n//case 2\nelse if (a == 2)' + to + '{}',
+ '//case 1\nif (a == 1)' + eo + '{}\n//case 2\nelse if (a == 2)' + eo + '{}');
+ bt( 'if(1)' + to + '{2}' + tc + 'else' + to + '{3}',
+ 'if (1)' + eo + '{\n 2\n}' + ec + 'else' + eo + '{\n 3\n}');
+ bt( 'try' + to + '{a();}' + tc +
+ 'catch(b)' + to + '{c();}' + tc +
+ 'catch(d)' + to + '{}' + tc +
+ 'finally' + to + '{e();}',
+ // expected
+ 'try' + eo + '{\n a();\n}' + ec +
+ 'catch (b)' + eo + '{\n c();\n}' + ec +
+ 'catch (d)' + eo + '{}' + ec +
+ 'finally' + eo + '{\n e();\n}');
+ bt( 'if(a)' + to + '{b();}' + tc + 'else if(c) foo();',
+ 'if (a)' + eo + '{\n b();\n}' + ec + 'else if (c) foo();');
+ // if/else statement with empty body
+ bt( 'if (a)' + to + '{\n// comment\n}' + tc + 'else' + to + '{\n// comment\n}',
+ 'if (a)' + eo + '{\n // comment\n}' + ec + 'else' + eo + '{\n // comment\n}');
+ bt( 'if (x)' + to + '{y}' + tc + 'else' + to + '{ if (x)' + to + '{y}}',
+ 'if (x)' + eo + '{\n y\n}' + ec + 'else' + eo + '{\n if (x)' + eo + i + '{\n y\n }\n}');
+ bt( 'if (a)' + to + '{\nb;\n}' + tc + 'else' + to + '{\nc;\n}',
+ 'if (a)' + eo + '{\n b;\n}' + ec + 'else' + eo + '{\n c;\n}');
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo)' + to + '{\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo)' + eo + i + '{\n bar();\n }');
+ bt( 'if (foo)' + to + '{}' + tc + 'else /regex/.test();',
+ 'if (foo)' + eo + '{}' + ec + 'else /regex/.test();');
+ test_fragment('if (foo)' + to + '{', 'if (foo)' + eo + '{');
+ test_fragment('foo' + to + '{', 'foo' + eo + '{');
+ test_fragment('return;' + to + '{', 'return;' + eo + '{');
+ bt( 'function x()' + to + '{\n foo();\n}zzz', 'function x()' + eo +'{\n foo();\n}\nzzz');
+ bt( 'var a = new function a()' + to + '{};', 'var a = new function a()' + eo + '{};');
+ bt( 'var a = new function a()' + to + ' {},\n b = new function b()' + to + ' {};',
+ 'var a = new function a()' + eo + i + '{},\n b = new function b()' + eo + i + '{};');
+ bt("foo(" + to + "{\n 'a': 1\n},\n10);",
+ "foo(" + (eo === ' ' ? '' : eo) + i + "{\n 'a': 1\n },\n 10);"); // "foo( {..." is a weird case
+ bt('(["foo","bar"]).each(function(i)' + to + '{return i;});',
+ '(["foo", "bar"]).each(function(i)' + eo + '{\n return i;\n});');
+ bt('(function(i)' + to + '{return i;})();', '(function(i)' + eo + '{\n return i;\n})();');
+
+ bt( "test( /*Argument 1*/" + to + "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test( /*Argument 1*/" + eo + i + "{\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+
+ bt( "test( /*Argument 1*/" + to + "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test( /*Argument 1*/" + eo + i + "{\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+ }
+
+ run_brace_permutation('\n', '\n');
+ run_brace_permutation('\n', ' ');
+ run_brace_permutation(' ', ' ');
+ run_brace_permutation(' ', '\n');
+ run_brace_permutation('','');
+
+ // brace tests that don't make sense to permutate
+ test_fragment('return {'); // return needs the brace.
+ test_fragment('return /* inline */ {');
+ bt('throw {}');
+ bt('throw {\n foo;\n}');
+ bt( 'var foo = {}');
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx');
+ bt( '{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}');
+ bt( 'var a = new function() {};');
+ bt( 'var a = new function()\n{};', 'var a = new function() {};');
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ // expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });");
+ }
+
+ reset_options();
+ opts.brace_style = brace_style;
+
+ switch(opts.brace_style) {
+ case 'collapse':
+ permute_brace_tests(' ', ' ');
+ break;
+ case 'expand':
+ permute_brace_tests('\n', '\n');
+ break;
+ case 'end-expand':
+ permute_brace_tests(' ', '\n');
+ break;
+ case 'none':
+ permute_brace_tests();
+ break;
+ }
+ }
+
+ function unicode_char(value) {
+ return String.fromCharCode(value);
+ }
+
+ function beautifier_tests()
+ {
+ sanitytest = test_obj;
+
+{{#groups}}{{#set_mustache_tags}}.{{/set_mustache_tags}}
+ //============================================================
+ {{^matrix}}
+ // {{&name}}
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+ {{#matrix}}
+ // {{&name}} - ({{#matrix_context_string}}.{{/matrix_context_string}})
+ reset_options();
+ {{#options}}
+ opts.{{name}} = {{&value}};
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}};
+ {{/tests}}
+
+ {{/matrix}}
+{{#unset_mustache_tags}}.{{/unset_mustache_tags}}{{/groups}}
+ }
+
+ function beautifier_unconverted_tests()
+ {
+ sanitytest = test_obj;
+
+ reset_options();
+ //============================================================
+ opts.indent_size = 1;
+ opts.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}");
+
+ bt('var a,b=1,c=2', 'var a, b = 1,\n c = 2');
+
+ opts.indent_size = 4;
+ opts.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}");
+
+ opts.indent_size = 1;
+ opts.indent_char = "\t";
+ bt('{ one_char() }', "{\n\tone_char()\n}");
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;');
+
+ //set to something else than it should change to, but with tabs on, should override
+ opts.indent_size = 5;
+ opts.indent_char = ' ';
+ opts.indent_with_tabs = true;
+
+ bt('{ one_char() }', "{\n\tone_char()\n}");
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;');
+
+ opts.indent_size = 4;
+ opts.indent_char = ' ';
+ opts.indent_with_tabs = false;
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = false;
+
+ bt('var\na=dont_preserve_newlines;', 'var a = dont_preserve_newlines;');
+
+ // make sure the blank line between function definitions stays
+ // even when preserve_newlines = false
+ bt('function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}');
+ bt('function foo() {\n return 1;\n}\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ );
+ bt('function foo() {\n return 1;\n}\n\n\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ );
+
+ opts.preserve_newlines = true;
+ bt('var\na=do_preserve_newlines;', 'var\n a = do_preserve_newlines;');
+ bt('if (foo) // comment\n{\n bar();\n}');
+
+
+ reset_options();
+ //============================================================
+ opts.keep_array_indentation = false;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f'\n]");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]");
+ bt('var x = [{}\n]', 'var x = [{}]');
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n}]');
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);",
+ "a = ['something',\n 'completely',\n 'different'\n];\nif (x);");
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']");
+
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']");
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]");
+ bt('{a([[a1]], {b;});}',
+ '{\n a([\n [a1]\n ], {\n b;\n });\n}');
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n[\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();");
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();");
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}");
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}');
+ // 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}");
+ // 3 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}");
+
+ opts.keep_array_indentation = true;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']");
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']");
+ bt('var x = [{}\n]', 'var x = [{}\n]');
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n }\n]');
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);");
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']");
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']");
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]");
+ bt('{a([[a1]], {b;});}',
+ '{\n a([[a1]], {\n b;\n });\n}');
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();");
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();");
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}");
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}');
+ // 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}");
+ // 3 spaces per indent input, processed with 4-spaces per indent
+ // Should be unchanged, but is not - #445
+// bt( "function foo() {\n" +
+// " return [\n" +
+// " {\n" +
+// " one: 'x',\n" +
+// " two: [\n" +
+// " {\n" +
+// " id: 'a',\n" +
+// " name: 'apple'\n" +
+// " }, {\n" +
+// " id: 'b',\n" +
+// " name: 'banana'\n" +
+// " }\n" +
+// " ]\n" +
+// " }\n" +
+// " ];\n" +
+// "}");
+
+
+ reset_options();
+ //============================================================
+ bt('a = //comment\n /regex/;');
+
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}', 'if (a) {\n b;\n} else {\n c;\n}');
+
+ // tests for brace positioning
+ beautify_brace_tests('expand');
+ beautify_brace_tests('collapse');
+ beautify_brace_tests('end-expand');
+ beautify_brace_tests('none');
+
+ test_fragment('roo = {\n /*\n ****\n FOO\n ****\n */\n BAR: 0\n};');
+
+ bt('"foo""bar""baz"', '"foo"\n"bar"\n"baz"');
+ bt("'foo''bar''baz'", "'foo'\n'bar'\n'baz'");
+
+
+ test_fragment("if (zz) {\n // ....\n}\n(function");
+
+ bt("{\n get foo() {}\n}");
+ bt("{\n var a = get\n foo();\n}");
+ bt("{\n set foo() {}\n}");
+ bt("{\n var a = set\n foo();\n}");
+ bt("var x = {\n get function()\n}");
+ bt("var x = {\n set function()\n}");
+
+ // According to my current research get/set have no special meaning outside of an object literal
+ bt("var x = set\n\na() {}", "var x = set\n\na() {}");
+ bt("var x = set\n\nfunction() {}", "var x = set\n\nfunction() {}");
+
+ bt('');
+ bt('
+ bt('for () /abc/.test()');
+ bt('if (k) /aaa/m.test(v) && l();');
+ bt('switch (true) {\n case /swf/i.test(foo):\n bar();\n}');
+ bt('createdAt = {\n type: Date,\n default: Date.now\n}');
+ bt('switch (createdAt) {\n case a:\n Date,\n default:\n Date.now\n}');
+
+ reset_options();
+ //============================================================
+ opts.space_before_conditional = false;
+ bt('if(a) b()');
+
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = true;
+ bt('var a = 42; // foo\n\nvar b;');
+ bt('var a = 42; // foo\n\n\nvar b;');
+ bt("var a = 'foo' +\n 'bar';");
+ bt("var a = \"foo\" +\n \"bar\";");
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');');
+
+
+ reset_options();
+ //============================================================
+ opts.unescape_strings = false;
+ bt('"\\\\s"'); // == "\\s" in the js source
+ bt("'\\\\s'"); // == '\\s' in the js source
+ bt("'\\\\\\s'"); // == '\\\s' in the js source
+ bt("'\\s'"); // == '\s' in the js source
+ bt('"•"');
+ bt('"—"');
+ bt('"\\x41\\x42\\x43\\x01"', '"\\x41\\x42\\x43\\x01"');
+ bt('"\\u2022"', '"\\u2022"');
+ bt('a = /\s+/');
+ // bt('a = /\\x41/','a = /A/');
+ bt('"\\u2022";a = /\s+/;"\\x41\\x42\\x43\\x01".match(/\\x41/);','"\\u2022";\na = /\s+/;\n"\\x41\\x42\\x43\\x01".match(/\\x41/);');
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"', '"\\x22\\x27", \'\\x22\\x27\', "\\x5c", \'\\x5c\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"');
+
+ opts.unescape_strings = true;
+ test_fragment('"\\x20\\x40\\x4a"', '" @J"');
+ test_fragment('"\\xff\\x40\\x4a"');
+ test_fragment('"\\u0072\\u016B\\u0137\\u012B\\u0074\\u0069\\u0073"', '"\u0072\u016B\u0137\u012B\u0074\u0069\u0073"');
+ test_fragment('"Google Chrome est\\u00E1 actualizado."', '"Google Chrome está actualizado."');
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff and \\xzz", "unicode \\u0000 \\" \\\' \\\\ ' + unicode_char(0xffff) + '"');
+
+ // For error case, return the string unchanged
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"');
+
+ reset_options();
+ //============================================================
+ bt('return function();');
+ bt('var a = function();');
+ bt('var a = 5 + function();');
+
+ bt('import foo.*;', 'import foo.*;'); // actionscript's import
+ test_fragment('function f(a: a, b: b)'); // actionscript
+
+ bt('{\n foo // something\n ,\n bar // something\n baz\n}');
+ bt('function a(a) {} function b(b) {} function c(c) {}', 'function a(a) {}\n\nfunction b(b) {}\n\nfunction c(c) {}');
+ bt('foo(a, function() {})');
+
+ bt('foo(a, /regex/)');
+
+ bt('/* foo */\n"x"');
+
+ reset_options();
+ //============================================================
+ opts.break_chained_methods = false;
+ opts.preserve_newlines = false;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar().baz().cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()');
+
+ opts.break_chained_methods = false;
+ opts.preserve_newlines = true;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz().cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()');
+
+ opts.break_chained_methods = true;
+ opts.preserve_newlines = false;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()');
+
+ opts.break_chained_methods = true;
+ opts.preserve_newlines = true;
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz()\n .cucumber(fat)');
+ bt('this.something.xxx = foo.moo.bar()');
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()');
+
+ reset_options();
+ //============================================================
+ // Line wrap test intputs
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_1=('foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_2=('{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ ' if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ ' }' +
+ '}');
+
+ opts.preserve_newlines = false;
+ opts.wrap_line_length = 0;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 70;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 40;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 41;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 45;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ /* expected */
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}');
+
+ opts.preserve_newlines = true;
+ opts.wrap_line_length = 0;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 70;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}');
+
+
+ opts.wrap_line_length = 40;
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 41;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ /* expected */
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}');
+
+ opts.wrap_line_length = 45;
+ // NOTE: wrap is only best effort - line continues until next wrap point is found.
+ //.............---------1---------2---------3---------4---------5---------6---------7
+ //.............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ /* expected */
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}');
+
+ reset_options();
+ //============================================================
+ opts.preserve_newlines = false;
+ bt('if (foo) // comment\n bar();');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n /asdf/;');
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');',
+ 'this.oa = new OAuth(_requestToken, _accessToken, consumer_key);');
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}');
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}');
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;',
+ 'this.type = this.options =\n // comment\n this.enabled null;');
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();',
+ 'someObj.someFunc1()\n // This comment should not break the indent\n .someFunc2();');
+
+ bt('if (true ||\n!true) return;', 'if (true || !true) return;');
+
+ // these aren't ready yet.
+ //bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\n else a();');
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo) bar();\nelse car();');
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();');
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();');
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();');
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];',
+ 'if (options)\n'+
+ ' for (var p in options) this[p] = options[p];');
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];');
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());');
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();');
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());');
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c, d, e) {}');
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+
+ // This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())');
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n(\n if (a) b())');
+
+
+
+ bt("if\n(a)\nb();", "if (a) b();");
+ bt('var a =\nfoo', 'var a = foo');
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}");
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}");
+ bt('var a = /*i*/ "b";');
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/ "b";');
+ bt('var a = /*i*/\nb;', 'var a = /*i*/ b;');
+ bt('{\n\n\n"x"\n}', '{\n "x"\n}');
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a && b || c || d && e) e = f');
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a && (b || c || d) && e) e = f');
+ test_fragment('\n\n"x"', '"x"');
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\nb = 2;');
+
+ opts.preserve_newlines = true;
+ bt('if (foo) // comment\n bar();');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n (bar());');
+ bt('if (foo) // comment\n /asdf/;');
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}');
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}');
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;');
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();');
+
+ bt('if (true ||\n!true) return;', 'if (true ||\n !true) return;');
+
+ // these aren't ready yet.
+ // bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\na();');
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\n else\n a();');
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo)\n bar();\nelse\n car();');
+ bt('if (foo) bar();\nelse\ncar();',
+ 'if (foo) bar();\nelse\n car();');
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();');
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();');
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();');
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();');
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];');
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];');
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());');
+ bt('if (options) do; while (b());',
+ 'if (options)\n do; while (b());');
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();');
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());');
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c,\n d, e) {}');
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\n\n\nfunction g(a, b) {\n if (!a) b()\n}');
+ // This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())');
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n\n\n(\n if (a) b())');
+
+ // space between functions
+ bt('/*\n * foo\n */\nfunction foo() {}');
+ bt('// a nice function\nfunction foo() {}');
+ bt('function foo() {}\nfunction foo() {}',
+ 'function foo() {}\n\nfunction foo() {}'
+ );
+
+ bt('[\n function() {}\n]');
+
+
+
+ bt("if\n(a)\nb();", "if (a)\n b();");
+ bt('var a =\nfoo', 'var a =\n foo');
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}");
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}");
+ bt('var a = /*i*/ "b";');
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/\n "b";');
+ bt('var a = /*i*/\nb;', 'var a = /*i*/\n b;');
+ bt('{\n\n\n"x"\n}', '{\n\n\n "x"\n}');
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a &&\n b ||\n c ||\n d &&\n e) e = f');
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a &&\n (b ||\n c ||\n d) &&\n e) e = f');
+ test_fragment('\n\n"x"', '"x"');
+
+ // this beavior differs between js and python, defaults to unlimited in js, 10 in python
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;');
+ opts.max_preserve_newlines = 8;
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\nb = 2;');
+
+ reset_options();
+ //============================================================
+
+
+ Urlencoded.run_tests(sanitytest);
+ }
+
+ beautifier_tests();
+ beautifier_unconverted_tests();
+}
+
+if (typeof exports !== "undefined") {
+ exports.run_javascript_tests = run_javascript_tests;
+}
diff --git a/node_modules/js-beautify/test/data/javascript/python.mustache b/node_modules/js-beautify/test/data/javascript/python.mustache
new file mode 100644
index 0000000..4cdde4d
--- /dev/null
+++ b/node_modules/js-beautify/test/data/javascript/python.mustache
@@ -0,0 +1,1322 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+'''
+{{&header_text}}
+
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+'''
+
+import re
+import unittest
+import jsbeautifier
+import six
+import copy
+
+class TestJSBeautifier(unittest.TestCase):
+ options = None
+
+ @classmethod
+ def setUpClass(cls):
+ true = True
+ false = False
+
+ default_options = jsbeautifier.default_options()
+ default_options.indent_size = 4
+ default_options.indent_char = ' '
+ default_options.preserve_newlines = True
+ default_options.jslint_happy = False
+ default_options.keep_array_indentation = False
+ default_options.brace_style = 'collapse'
+ default_options.indent_level = 0
+ default_options.break_chained_methods = False
+ default_options.eol = '\n'
+
+{{#default_options}} default_options.{{name}} = {{&value}}
+{{/default_options}}
+
+ cls.default_options = default_options
+ cls.wrapregex = re.compile('^(.+)$', re.MULTILINE)
+
+ def reset_options(self):
+ self.options = copy.copy(self.default_options)
+
+ def test_unescape(self):
+ # Test cases contributed by
+ test_fragment = self.decodesto
+ self.reset_options()
+ bt = self.bt
+
+ def unicode_char(value):
+ return six.unichr(value)
+
+ bt('"\\\\s"') # == "\\s" in the js source
+ bt("'\\\\s'") # == '\\s' in the js source
+ bt("'\\\\\\s'") # == '\\\s' in the js source
+ bt("'\\s'") # == '\s' in the js source
+ bt('"•"')
+ bt('"—"')
+ bt('"\\x41\\x42\\x43\\x01"', '"\\x41\\x42\\x43\\x01"')
+ bt('"\\u2022"', '"\\u2022"')
+ bt('a = /\s+/')
+ #bt('a = /\\x41/','a = /A/')
+ bt('"\\u2022";a = /\s+/;"\\x41\\x42\\x43\\x01".match(/\\x41/);','"\\u2022";\na = /\s+/;\n"\\x41\\x42\\x43\\x01".match(/\\x41/);')
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"', '"\\x22\\x27", \'\\x22\\x27\', "\\x5c", \'\\x5c\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"')
+
+ self.options.unescape_strings = True
+
+ bt('"\\x41\\x42\\x43\\x01"', '"ABC\\x01"')
+ test_fragment('"\\x20\\x40\\x4a"', '" @J"');
+ test_fragment('"\\xff\\x40\\x4a"');
+ test_fragment('"\\u0072\\u016B\\u0137\\u012B\\u0074\\u0069\\u0073"', six.u('"\u0072\u016B\u0137\u012B\u0074\u0069\u0073"'));
+
+ bt('a = /\s+/')
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff", "unicode \\u0000 \\" \\\' \\\\ ' + unicode_char(0xffff) + '"');
+
+ # For error case, return the string unchanged
+ test_fragment('"\\x22\\x27",\'\\x22\\x27\',"\\x5c",\'\\x5c\',"\\xff and \\xzz","unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"',
+ '"\\"\\\'", \'\\"\\\'\', "\\\\", \'\\\\\', "\\xff and \\xzz", "unicode \\u0000 \\u0022 \\u0027 \\u005c \\uffff \\uzzzz"');
+
+ self.options.unescape_strings = False
+
+ def test_beautifier(self):
+ test_fragment = self.decodesto
+ bt = self.bt
+
+ true = True
+ false = False
+
+ def unicode_char(value):
+ return six.unichr(value)
+
+{{#groups}}{{#set_mustache_tags}}.{{/set_mustache_tags}}
+ #============================================================
+ {{^matrix}}
+ # {{&name}}
+ self.reset_options();
+ {{#options}}
+ self.options.{{name}} = {{&value}}
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}}
+ {{/tests}}
+
+ {{/matrix}}
+ {{#matrix}}
+ # {{&name}} - ({{#matrix_context_string}}.{{/matrix_context_string}})
+ self.reset_options();
+ {{#options}}
+ self.options.{{name}} = {{&value}}
+ {{/options}}
+ {{#tests}}
+ {{#test_line}}.{{/test_line}}
+ {{/tests}}
+
+ {{/matrix}}
+{{#unset_mustache_tags}}.{{/unset_mustache_tags}}{{/groups}}
+
+ def test_beautifier_unconverted(self):
+ test_fragment = self.decodesto
+ bt = self.bt
+
+ self.reset_options();
+ #============================================================
+ self.options.indent_size = 1;
+ self.options.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}")
+
+ bt('var a,b=1,c=2', 'var a, b = 1,\n c = 2')
+
+ self.options.indent_size = 4;
+ self.options.indent_char = ' ';
+ bt('{ one_char() }', "{\n one_char()\n}")
+
+ self.options.indent_size = 1;
+ self.options.indent_char = "\t";
+ bt('{ one_char() }', "{\n\tone_char()\n}")
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;')
+
+ #set to something else than it should change to, but with tabs on, should override
+ self.options.indent_size = 5;
+ self.options.indent_char = ' ';
+ self.options.indent_with_tabs = True;
+
+ bt('{ one_char() }', "{\n\tone_char()\n}")
+ bt('x = a ? b : c; x;', 'x = a ? b : c;\nx;')
+
+
+ self.reset_options();
+ #============================================================
+ self.options.preserve_newlines = False;
+ bt('var\na=dont_preserve_newlines;', 'var a = dont_preserve_newlines;')
+
+ # make sure the blank line between function definitions stays
+ # even when preserve_newlines = False
+ bt('function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}')
+ bt('function foo() {\n return 1;\n}\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ )
+ bt('function foo() {\n return 1;\n}\n\n\nfunction foo() {\n return 1;\n}',
+ 'function foo() {\n return 1;\n}\n\nfunction foo() {\n return 1;\n}'
+ )
+
+
+ self.options.preserve_newlines = True;
+ bt('var\na=do_preserve_newlines;', 'var\n a = do_preserve_newlines;')
+ bt('if (foo) // comment\n{\n bar();\n}')
+
+
+ self.reset_options();
+ #============================================================
+ self.options.keep_array_indentation = False;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f'\n]")
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]")
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']",
+ "a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i'\n]")
+ bt('var x = [{}\n]', 'var x = [{}]')
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n}]')
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);",
+ "a = ['something',\n 'completely',\n 'different'\n];\nif (x);")
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']")
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']")
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]")
+ bt('{a([[a1]], {b;});}',
+ '{\n a([\n [a1]\n ], {\n b;\n });\n}')
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n[\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();")
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n].toString();")
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}")
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}')
+ # 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}")
+ # 3 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}",
+ "function foo() {\n" +
+ " return [{\n" +
+ " one: 'x',\n" +
+ " two: [{\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }]\n" +
+ " }];\n" +
+ "}")
+
+ self.options.keep_array_indentation = True;
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f']")
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']")
+ bt("a = ['a', 'b', 'c',\n 'd', 'e', 'f',\n 'g', 'h', 'i']")
+ bt('var x = [{}\n]', 'var x = [{}\n]')
+ bt('var x = [{foo:bar}\n]', 'var x = [{\n foo: bar\n }\n]')
+ bt("a = ['something',\n 'completely',\n 'different'];\nif (x);")
+ bt("a = ['a','b','c']", "a = ['a', 'b', 'c']")
+ bt("a = ['a', 'b','c']", "a = ['a', 'b', 'c']")
+ bt("x = [{'a':0}]",
+ "x = [{\n 'a': 0\n}]")
+ bt('{a([[a1]], {b;});}',
+ '{\n a([[a1]], {\n b;\n });\n}')
+ bt("a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\n [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();")
+ bt("a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();",
+ "a();\na = [\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ].toString();")
+ bt("function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}",
+ "function() {\n Foo([\n ['sdfsdfsd'],\n ['sdfsdfsdf']\n ]);\n}")
+ bt('function foo() {\n return [\n "one",\n "two"\n ];\n}')
+ # 4 spaces per indent input, processed with 4-spaces per indent
+ bt( "function foo() {\n" +
+ " return [\n" +
+ " {\n" +
+ " one: 'x',\n" +
+ " two: [\n" +
+ " {\n" +
+ " id: 'a',\n" +
+ " name: 'apple'\n" +
+ " }, {\n" +
+ " id: 'b',\n" +
+ " name: 'banana'\n" +
+ " }\n" +
+ " ]\n" +
+ " }\n" +
+ " ];\n" +
+ "}")
+ # 3 spaces per indent input, processed with 4-spaces per indent
+ # Should be unchanged, but is not - #445
+# bt( "function foo() {\n" +
+# " return [\n" +
+# " {\n" +
+# " one: 'x',\n" +
+# " two: [\n" +
+# " {\n" +
+# " id: 'a',\n" +
+# " name: 'apple'\n" +
+# " }, {\n" +
+# " id: 'b',\n" +
+# " name: 'banana'\n" +
+# " }\n" +
+# " ]\n" +
+# " }\n" +
+# " ];\n" +
+# "}")
+
+ self.reset_options();
+ #============================================================
+ bt('a = //comment\n /regex/;')
+
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}', 'if (a) {\n b;\n} else {\n c;\n}')
+
+ bt('var a = new function();')
+ test_fragment('new function')
+
+ self.reset_options();
+ #============================================================
+ # START tests for brace positioning
+
+ # If this is ever supported, update tests for each brace style.
+ # test_fragment('return\n{', 'return\n{') # can't support this?, but that's an improbable and extreme case anyway.
+
+ self.options.brace_style = 'expand';
+
+ bt('//case 1\nif (a == 1)\n{}\n//case 2\nelse if (a == 2)\n{}')
+ bt('if(1){2}else{3}', "if (1)\n{\n 2\n}\nelse\n{\n 3\n}")
+ bt('try{a();}catch(b){c();}catch(d){}finally{e();}',
+ "try\n{\n a();\n}\ncatch (b)\n{\n c();\n}\ncatch (d)\n{}\nfinally\n{\n e();\n}")
+ bt('if(a){b();}else if(c) foo();',
+ "if (a)\n{\n b();\n}\nelse if (c) foo();")
+ bt("if (a) {\n// comment\n}else{\n// comment\n}",
+ "if (a)\n{\n // comment\n}\nelse\n{\n // comment\n}") # if/else statement with empty body
+ bt('if (x) {y} else { if (x) {y}}',
+ 'if (x)\n{\n y\n}\nelse\n{\n if (x)\n {\n y\n }\n}')
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}',
+ 'if (a)\n{\n b;\n}\nelse\n{\n c;\n}')
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo) {\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo)\n {\n bar();\n }')
+ bt('if (foo)\n{}\nelse /regex/.test();')
+ test_fragment('if (foo) {', 'if (foo)\n{')
+ test_fragment('foo {', 'foo\n{')
+ test_fragment('return {', 'return {') # return needs the brace.
+ test_fragment('return /* inline */ {', 'return /* inline */ {')
+ test_fragment('return;\n{', 'return;\n{')
+ bt("throw {}")
+ bt("throw {\n foo;\n}")
+ bt('var foo = {}')
+ bt('function x() {\n foo();\n}zzz', 'function x()\n{\n foo();\n}\nzzz')
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx')
+ bt('{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}')
+ bt('var a = new function() {};')
+ bt('var a = new function a() {};', 'var a = new function a()\n{};')
+ bt('var a = new function()\n{};', 'var a = new function() {};')
+ bt('var a = new function a()\n{};')
+ bt('var a = new function a()\n {},\n b = new function b()\n {};')
+ bt("foo({\n 'a': 1\n},\n10);",
+ "foo(\n {\n 'a': 1\n },\n 10);")
+ bt('(["foo","bar"]).each(function(i) {return i;});',
+ '(["foo", "bar"]).each(function(i)\n{\n return i;\n});')
+ bt('(function(i) {return i;})();',
+ '(function(i)\n{\n return i;\n})();')
+ bt( "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test( /*Argument 1*/\n" +
+ "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+
+ self.options.brace_style = 'collapse';
+
+ bt('//case 1\nif (a == 1) {}\n//case 2\nelse if (a == 2) {}')
+ bt('if(1){2}else{3}', "if (1) {\n 2\n} else {\n 3\n}")
+ bt('try{a();}catch(b){c();}catch(d){}finally{e();}',
+ "try {\n a();\n} catch (b) {\n c();\n} catch (d) {} finally {\n e();\n}")
+ bt('if(a){b();}else if(c) foo();',
+ "if (a) {\n b();\n} else if (c) foo();")
+ bt("if (a) {\n// comment\n}else{\n// comment\n}",
+ "if (a) {\n // comment\n} else {\n // comment\n}") # if/else statement with empty body
+ bt('if (x) {y} else { if (x) {y}}',
+ 'if (x) {\n y\n} else {\n if (x) {\n y\n }\n}')
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}',
+ 'if (a) {\n b;\n} else {\n c;\n}')
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo) {\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo) {\n bar();\n }')
+ bt('if (foo) {} else /regex/.test();')
+ test_fragment('if (foo) {', 'if (foo) {')
+ test_fragment('foo {', 'foo {')
+ test_fragment('return {', 'return {') # return needs the brace.
+ test_fragment('return /* inline */ {', 'return /* inline */ {')
+ test_fragment('return;\n{', 'return; {')
+ bt("throw {}")
+ bt("throw {\n foo;\n}")
+ bt('var foo = {}')
+ bt('function x() {\n foo();\n}zzz', 'function x() {\n foo();\n}\nzzz')
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx')
+ bt('{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}')
+ bt('var a = new function() {};')
+ bt('var a = new function a() {};')
+ bt('var a = new function()\n{};', 'var a = new function() {};')
+ bt('var a = new function a()\n{};', 'var a = new function a() {};')
+ bt('var a = new function a()\n {},\n b = new function b()\n {};', 'var a = new function a() {},\n b = new function b() {};')
+ bt("foo({\n 'a': 1\n},\n10);",
+ "foo({\n 'a': 1\n },\n 10);")
+ bt('(["foo","bar"]).each(function(i) {return i;});',
+ '(["foo", "bar"]).each(function(i) {\n return i;\n});')
+ bt('(function(i) {return i;})();',
+ '(function(i) {\n return i;\n})();')
+ bt( "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test( /*Argument 1*/\n" +
+ "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+
+ self.options.brace_style = "end-expand";
+
+ bt('//case 1\nif (a == 1) {}\n//case 2\nelse if (a == 2) {}')
+ bt('if(1){2}else{3}', "if (1) {\n 2\n}\nelse {\n 3\n}")
+ bt('try{a();}catch(b){c();}catch(d){}finally{e();}',
+ "try {\n a();\n}\ncatch (b) {\n c();\n}\ncatch (d) {}\nfinally {\n e();\n}")
+ bt('if(a){b();}else if(c) foo();',
+ "if (a) {\n b();\n}\nelse if (c) foo();")
+ bt("if (a) {\n// comment\n}else{\n// comment\n}",
+ "if (a) {\n // comment\n}\nelse {\n // comment\n}") # if/else statement with empty body
+ bt('if (x) {y} else { if (x) {y}}',
+ 'if (x) {\n y\n}\nelse {\n if (x) {\n y\n }\n}')
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}',
+ 'if (a) {\n b;\n}\nelse {\n c;\n}')
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo) {\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo) {\n bar();\n }')
+ bt('if (foo) {}\nelse /regex/.test();')
+ test_fragment('if (foo) {', 'if (foo) {')
+ test_fragment('foo {', 'foo {')
+ test_fragment('return {', 'return {') # return needs the brace.
+ test_fragment('return /* inline */ {', 'return /* inline */ {')
+ test_fragment('return;\n{', 'return; {')
+ bt("throw {}")
+ bt("throw {\n foo;\n}")
+ bt('var foo = {}')
+ bt('function x() {\n foo();\n}zzz', 'function x() {\n foo();\n}\nzzz')
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx')
+ bt('{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}')
+ bt('var a = new function() {};')
+ bt('var a = new function a() {};')
+ bt('var a = new function()\n{};', 'var a = new function() {};')
+ bt('var a = new function a()\n{};', 'var a = new function a() {};')
+ bt('var a = new function a()\n {},\n b = new function b()\n {};', 'var a = new function a() {},\n b = new function b() {};')
+ bt("foo({\n 'a': 1\n},\n10);",
+ "foo({\n 'a': 1\n },\n 10);")
+ bt('(["foo","bar"]).each(function(i) {return i;});',
+ '(["foo", "bar"]).each(function(i) {\n return i;\n});')
+ bt('(function(i) {return i;})();',
+ '(function(i) {\n return i;\n})();')
+ bt( "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test( /*Argument 1*/\n" +
+ "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+
+ self.options.brace_style = 'none';
+
+ bt('//case 1\nif (a == 1)\n{}\n//case 2\nelse if (a == 2)\n{}')
+ bt('if(1){2}else{3}', "if (1) {\n 2\n} else {\n 3\n}")
+ bt('try{a();}catch(b){c();}catch(d){}finally{e();}',
+ "try {\n a();\n} catch (b) {\n c();\n} catch (d) {} finally {\n e();\n}")
+ bt('if(a){b();}else if(c) foo();',
+ "if (a) {\n b();\n} else if (c) foo();")
+ bt("if (a) {\n// comment\n}else{\n// comment\n}",
+ "if (a) {\n // comment\n} else {\n // comment\n}") # if/else statement with empty body
+ bt('if (x) {y} else { if (x) {y}}',
+ 'if (x) {\n y\n} else {\n if (x) {\n y\n }\n}')
+ bt('if (a)\n{\nb;\n}\nelse\n{\nc;\n}',
+ 'if (a)\n{\n b;\n}\nelse\n{\n c;\n}')
+ test_fragment(' /*\n* xx\n*/\n// xx\nif (foo) {\n bar();\n}',
+ ' /*\n * xx\n */\n // xx\n if (foo) {\n bar();\n }')
+ bt('if (foo)\n{}\nelse /regex/.test();')
+ test_fragment('if (foo) {')
+ test_fragment('foo {')
+ test_fragment('return {') # return needs the brace.
+ test_fragment('return /* inline */ {')
+ test_fragment('return;\n{')
+ bt("throw {}")
+ bt("throw {\n foo;\n}")
+ bt('var foo = {}')
+ bt('function x() {\n foo();\n}zzz', 'function x() {\n foo();\n}\nzzz')
+ test_fragment('a: do {} while (); xxx', 'a: do {} while ();\nxxx')
+ bt('{a: do {} while (); xxx}', '{\n a: do {} while ();xxx\n}')
+ bt('var a = new function() {};')
+ bt('var a = new function a() {};')
+ bt('var a = new function()\n{};', 'var a = new function() {};')
+ bt('var a = new function a()\n{};')
+ bt('var a = new function a()\n {},\n b = new function b()\n {};')
+ bt("foo({\n 'a': 1\n},\n10);",
+ "foo({\n 'a': 1\n },\n 10);")
+ bt('(["foo","bar"]).each(function(i) {return i;});',
+ '(["foo", "bar"]).each(function(i) {\n return i;\n});')
+ bt('(function(i) {return i;})();',
+ '(function(i) {\n return i;\n})();')
+ bt( "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test(\n" +
+ "/*Argument 1*/ {\n" +
+ " 'Value1': '1'\n" +
+ "},\n" +
+ "/*Argument 2\n" +
+ " */ {\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test(\n" +
+ " /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ bt( "test( /*Argument 1*/\n" +
+ "{\n" +
+ " 'Value1': '1'\n" +
+ "}, /*Argument 2\n" +
+ " */\n" +
+ "{\n" +
+ " 'Value2': '2'\n" +
+ "});",
+ # expected
+ "test( /*Argument 1*/\n" +
+ " {\n" +
+ " 'Value1': '1'\n" +
+ " },\n" +
+ " /*Argument 2\n" +
+ " */\n" +
+ " {\n" +
+ " 'Value2': '2'\n" +
+ " });")
+ # END tests for brace position
+
+ self.reset_options();
+ #============================================================
+ test_fragment('roo = {\n /*\n ****\n FOO\n ****\n */\n BAR: 0\n};')
+ test_fragment("if (zz) {\n // ....\n}\n(function")
+
+ self.reset_options();
+ #============================================================
+ self.options.preserve_newlines = True;
+ bt('var a = 42; // foo\n\nvar b;')
+ bt('var a = 42; // foo\n\n\nvar b;')
+ bt("var a = 'foo' +\n 'bar';")
+ bt("var a = \"foo\" +\n \"bar\";")
+
+ bt('"foo""bar""baz"', '"foo"\n"bar"\n"baz"')
+ bt("'foo''bar''baz'", "'foo'\n'bar'\n'baz'")
+ bt("{\n get foo() {}\n}")
+ bt("{\n var a = get\n foo();\n}")
+ bt("{\n set foo() {}\n}")
+ bt("{\n var a = set\n foo();\n}")
+ bt("var x = {\n get function()\n}")
+ bt("var x = {\n set function()\n}")
+
+ # According to my current research get/set have no special meaning outside of an object literal
+ bt("var x = set\n\na() {}", "var x = set\n\na() {}")
+ bt("var x = set\n\nfunction() {}", "var x = set\n\nfunction() {}")
+
+ bt('')
+ bt('
+ bt('for () /abc/.test()')
+ bt('if (k) /aaa/m.test(v) && l();')
+ bt('switch (true) {\n case /swf/i.test(foo):\n bar();\n}')
+ bt('createdAt = {\n type: Date,\n default: Date.now\n}')
+ bt('switch (createdAt) {\n case a:\n Date,\n default:\n Date.now\n}')
+
+ bt('return function();')
+ bt('var a = function();')
+ bt('var a = 5 + function();')
+
+ bt('{\n foo // something\n ,\n bar // something\n baz\n}')
+ bt('function a(a) {} function b(b) {} function c(c) {}', 'function a(a) {}\n\nfunction b(b) {}\n\nfunction c(c) {}')
+
+
+ bt('import foo.*;', 'import foo.*;') # actionscript's import
+ test_fragment('function f(a: a, b: b)') # actionscript
+ bt('foo(a, function() {})')
+ bt('foo(a, /regex/)')
+
+ bt('/* foo */\n"x"')
+
+ self.reset_options();
+ #============================================================
+ self.options.break_chained_methods = False
+ self.options.preserve_newlines = False
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar().baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)')
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar().baz().cucumber(fat)')
+ bt('this.something.xxx = foo.moo.bar()')
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()')
+
+ self.options.break_chained_methods = False
+ self.options.preserve_newlines = True
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat);\nfoo.bar().baz().cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz().cucumber(fat)\nfoo.bar().baz().cucumber(fat)')
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz().cucumber(fat)')
+ bt('this.something.xxx = foo.moo.bar()')
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()')
+
+ self.options.break_chained_methods = True
+ self.options.preserve_newlines = False
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo.bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)')
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this.something = foo.bar()\n .baz()\n .cucumber(fat)')
+ bt('this.something.xxx = foo.moo.bar()')
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this.something.xxx = foo.moo.bar()')
+
+ self.options.break_chained_methods = True
+ self.options.preserve_newlines = True
+ bt('foo\n.bar()\n.baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat); foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat);\nfoo.bar()\n .baz()\n .cucumber(fat)')
+ bt('foo\n.bar()\n.baz().cucumber(fat)\n foo.bar().baz().cucumber(fat)', 'foo\n .bar()\n .baz()\n .cucumber(fat)\nfoo.bar()\n .baz()\n .cucumber(fat)')
+ bt('this\n.something = foo.bar()\n.baz().cucumber(fat)', 'this\n .something = foo.bar()\n .baz()\n .cucumber(fat)')
+ bt('this.something.xxx = foo.moo.bar()')
+ bt('this\n.something\n.xxx = foo.moo\n.bar()', 'this\n .something\n .xxx = foo.moo\n .bar()')
+
+ self.reset_options();
+ #============================================================
+ # Line wrap test intputs
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_1=('foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}')
+
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ wrap_input_2=('{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n.but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ ' if (wraps_can_occur && inside_an_if_block) that_is_\n.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ ' }' +
+ '}')
+
+ self.options.preserve_newlines = False
+ self.options.wrap_line_length = 0
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}')
+
+ self.options.wrap_line_length = 70
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap.but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}')
+
+ self.options.wrap_line_length = 40
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}')
+
+ self.options.wrap_line_length = 41
+ # NOTE: wrap is only best effort - line continues until next wrap point is found.
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}')
+
+
+ self.options.wrap_line_length = 45
+ # NOTE: wrap is only best effort - line continues until next wrap point is found.
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ # expected #
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_.okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}')
+
+ self.options.preserve_newlines = True
+ self.options.wrap_line_length = 0
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}')
+
+
+ self.options.wrap_line_length = 70
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap.but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap.but_this_can\n' +
+ 'if (wraps_can_occur && inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token + 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap + but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap + !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" + "but_this_can"\n' +
+ '}')
+
+
+ self.options.wrap_line_length = 40
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat &&\n' +
+ ' "sassy") || (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}')
+
+ self.options.wrap_line_length = 41
+ # NOTE: wrap is only best effort - line continues until next wrap point is found.
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_1,
+ # expected #
+ 'foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ 'Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ 'if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ 'object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ '}')
+
+ self.options.wrap_line_length = 45
+ # NOTE: wrap is only best effort - line continues until next wrap point is found.
+ #..............---------1---------2---------3---------4---------5---------6---------7
+ #..............1234567890123456789012345678901234567890123456789012345678901234567890
+ test_fragment(wrap_input_2,
+ # expected #
+ '{\n' +
+ ' foo.bar().baz().cucumber((fat && "sassy") ||\n' +
+ ' (leans && mean));\n' +
+ ' Test_very_long_variable_name_this_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' return between_return_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' throw between_throw_and_expression_should_never_wrap\n' +
+ ' .but_this_can\n' +
+ ' if (wraps_can_occur &&\n' +
+ ' inside_an_if_block) that_is_\n' +
+ ' .okay();\n' +
+ ' object_literal = {\n' +
+ ' propertx: first_token +\n' +
+ ' 12345678.99999E-6,\n' +
+ ' property: first_token_should_never_wrap +\n' +
+ ' but_this_can,\n' +
+ ' propertz: first_token_should_never_wrap +\n' +
+ ' !but_this_can,\n' +
+ ' proper: "first_token_should_never_wrap" +\n' +
+ ' "but_this_can"\n' +
+ ' }\n'+
+ '}')
+
+ self.reset_options();
+ #============================================================
+ self.options.preserve_newlines = False
+ bt('if (foo) // comment\n bar();')
+ bt('if (foo) // comment\n (bar());')
+ bt('if (foo) // comment\n (bar());')
+ bt('if (foo) // comment\n /asdf/;')
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');',
+ 'this.oa = new OAuth(_requestToken, _accessToken, consumer_key);')
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}')
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}')
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;',
+ 'this.type = this.options =\n // comment\n this.enabled null;')
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();',
+ 'someObj.someFunc1()\n // This comment should not break the indent\n .someFunc2();')
+
+ bt('if (true ||\n!true) return;', 'if (true || !true) return;')
+
+ # these aren't ready yet.
+ #bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();')
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();')
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\n else a();')
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo) bar();\nelse car();')
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();')
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();')
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();')
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();')
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];',
+ 'if (options)\n'+
+ ' for (var p in options) this[p] = options[p];')
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];')
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());')
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();')
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());')
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c, d, e) {}')
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}')
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}')
+ # This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())')
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n(\n if (a) b())')
+
+ # space between functions
+ bt('/*\n * foo\n */\nfunction foo() {}')
+ bt('// a nice function\nfunction foo() {}')
+ bt('function foo() {}\nfunction foo() {}',
+ 'function foo() {}\n\nfunction foo() {}'
+ )
+
+ bt('[\n function() {}\n]')
+
+
+ bt("if\n(a)\nb();", "if (a) b();")
+ bt('var a =\nfoo', 'var a = foo')
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}")
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}")
+ bt('var a = /*i*/ "b";')
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/ "b";')
+ bt('var a = /*i*/\nb;', 'var a = /*i*/ b;')
+ bt('{\n\n\n"x"\n}', '{\n "x"\n}')
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a && b || c || d && e) e = f')
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a && (b || c || d) && e) e = f')
+ test_fragment('\n\n"x"', '"x"')
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\nb = 2;')
+
+
+ self.options.preserve_newlines = True
+ bt('if (foo) // comment\n bar();')
+ bt('if (foo) // comment\n (bar());')
+ bt('if (foo) // comment\n (bar());')
+ bt('if (foo) // comment\n /asdf/;')
+ bt('this.oa = new OAuth(\n' +
+ ' _requestToken,\n' +
+ ' _accessToken,\n' +
+ ' consumer_key\n' +
+ ');')
+ bt('foo = {\n x: y, // #44\n w: z // #44\n}')
+ bt('switch (x) {\n case "a":\n // comment on newline\n break;\n case "b": // comment on same line\n break;\n}')
+ bt('this.type =\n this.options =\n // comment\n this.enabled null;')
+ bt('someObj\n .someFunc1()\n // This comment should not break the indent\n .someFunc2();')
+
+ bt('if (true ||\n!true) return;', 'if (true ||\n !true) return;')
+
+ # these aren't ready yet.
+ # bt('if (foo) // comment\n bar() /*i*/ + baz() /*j\n*/ + asdf();')
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\na();')
+ bt('if\n(foo)\nif\n(bar)\nif\n(baz)\nwhee();\nelse\na();',
+ 'if (foo)\n if (bar)\n if (baz)\n whee();\n else\n a();')
+ bt('if (foo)\nbar();\nelse\ncar();',
+ 'if (foo)\n bar();\nelse\n car();')
+ bt('if (foo) bar();\nelse\ncar();',
+ 'if (foo) bar();\nelse\n car();')
+
+ bt('if (foo) if (bar) if (baz);\na();',
+ 'if (foo)\n if (bar)\n if (baz);\na();')
+ bt('if (foo) if (bar) if (baz) whee();\na();',
+ 'if (foo)\n if (bar)\n if (baz) whee();\na();')
+ bt('if (foo) a()\nif (bar) if (baz) whee();\na();',
+ 'if (foo) a()\nif (bar)\n if (baz) whee();\na();')
+ bt('if (foo);\nif (bar) if (baz) whee();\na();',
+ 'if (foo);\nif (bar)\n if (baz) whee();\na();')
+ bt('if (options)\n' +
+ ' for (var p in options)\n' +
+ ' this[p] = options[p];')
+ bt('if (options) for (var p in options) this[p] = options[p];',
+ 'if (options)\n for (var p in options) this[p] = options[p];')
+
+ bt('if (options) do q(); while (b());',
+ 'if (options)\n do q(); while (b());')
+ bt('if (options) do; while (b());',
+ 'if (options)\n do; while (b());')
+ bt('if (options) while (b()) q();',
+ 'if (options)\n while (b()) q();')
+ bt('if (options) do while (b()) q(); while (a());',
+ 'if (options)\n do\n while (b()) q(); while (a());')
+
+ bt('function f(a, b, c,\nd, e) {}',
+ 'function f(a, b, c,\n d, e) {}')
+
+ bt('function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\nfunction g(a, b) {\n if (!a) b()\n}')
+ bt('function f(a,b) {if(a) b()}\n\n\n\nfunction g(a,b) {if(!a) b()}',
+ 'function f(a, b) {\n if (a) b()\n}\n\n\n\nfunction g(a, b) {\n if (!a) b()\n}')
+ # This is not valid syntax, but still want to behave reasonably and not side-effect
+ bt('(if(a) b())(if(a) b())',
+ '(\n if (a) b())(\n if (a) b())')
+ bt('(if(a) b())\n\n\n(if(a) b())',
+ '(\n if (a) b())\n\n\n(\n if (a) b())')
+
+
+ bt("if\n(a)\nb();", "if (a)\n b();")
+ bt('var a =\nfoo', 'var a =\n foo')
+ bt('var a = {\n"a":1,\n"b":2}', "var a = {\n \"a\": 1,\n \"b\": 2\n}")
+ bt("var a = {\n'a':1,\n'b':2}", "var a = {\n 'a': 1,\n 'b': 2\n}")
+ bt('var a = /*i*/ "b";')
+ bt('var a = /*i*/\n"b";', 'var a = /*i*/\n "b";')
+ bt('var a = /*i*/\nb;', 'var a = /*i*/\n b;')
+ bt('{\n\n\n"x"\n}', '{\n\n\n "x"\n}')
+ bt('if(a &&\nb\n||\nc\n||d\n&&\ne) e = f', 'if (a &&\n b ||\n c ||\n d &&\n e) e = f')
+ bt('if(a &&\n(b\n||\nc\n||d)\n&&\ne) e = f', 'if (a &&\n (b ||\n c ||\n d) &&\n e) e = f')
+ test_fragment('\n\n"x"', '"x"')
+ # this beavior differs between js and python, defaults to unlimited in js, 10 in python
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\n\n\nb = 2;')
+ self.options.max_preserve_newlines = 8;
+ bt('a = 1;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nb = 2;',
+ 'a = 1;\n\n\n\n\n\n\n\nb = 2;')
+
+ self.reset_options();
+ #============================================================
+
+
+ def decodesto(self, input, expectation=None):
+ if expectation == None:
+ expectation = input
+
+ self.assertMultiLineEqual(
+ jsbeautifier.beautify(input, self.options), expectation)
+
+ # if the expected is different from input, run it again
+ # expected output should be unchanged when run twice.
+ if not expectation == None:
+ self.assertMultiLineEqual(
+ jsbeautifier.beautify(expectation, self.options), expectation)
+
+ # Everywhere we do newlines, they should be replaced with opts.eol
+ self.options.eol = '\r\\n';
+ expectation = expectation.replace('\n', '\r\n')
+ self.assertMultiLineEqual(
+ jsbeautifier.beautify(input, self.options), expectation)
+ if input.find('\n') != -1:
+ input = input.replace('\n', '\r\n')
+ self.assertMultiLineEqual(
+ jsbeautifier.beautify(input, self.options), expectation)
+ # Ensure support for auto eol detection
+ self.options.eol = 'auto'
+ self.assertMultiLineEqual(
+ jsbeautifier.beautify(input, self.options), expectation)
+ self.options.eol = '\n'
+
+ def wrap(self, text):
+ return self.wrapregex.sub(' \\1', text)
+
+ def bt(self, input, expectation=None):
+ if expectation == None:
+ expectation = input
+
+ self.decodesto(input, expectation)
+ # If we set raw, input should be unchanged
+ self.options.test_output_raw = True
+ if self.options.end_with_newline:
+ elf.decodesto(input, input)
+ self.options.test_output_raw = False
+
+ current_indent_size = None
+ if self.options.js and self.options.js['indent_size']:
+ current_indent_size = self.options.js['indent_size']
+
+ if not current_indent_size:
+ current_indent_size = self.options.indent_size
+
+ if current_indent_size == 4 and input:
+ wrapped_input = '{\n%s\n foo = bar;\n}' % self.wrap(input)
+ wrapped_expect = '{\n%s\n foo = bar;\n}' % self.wrap(expectation)
+ self.decodesto(wrapped_input, wrapped_expect)
+
+ # If we set raw, input should be unchanged
+ self.options.test_output_raw = True
+ if self.options.end_with_newline:
+ elf.decodesto(wrapped_input, wrapped_input)
+ self.options.test_output_raw = False
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/node_modules/js-beautify/test/data/javascript/tests.js b/node_modules/js-beautify/test/data/javascript/tests.js
new file mode 100644
index 0000000..bb78f75
--- /dev/null
+++ b/node_modules/js-beautify/test/data/javascript/tests.js
@@ -0,0 +1,3083 @@
+/*
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+
+var inputlib = require('./inputlib');
+
+exports.test_data = {
+ default_options: [
+ { name: "indent_size", value: "4" },
+ { name: "indent_char", value: "' '" },
+ { name: "preserve_newlines", value: "true" },
+ { name: "jslint_happy", value: "false" },
+ { name: "keep_array_indentation", value: "false" },
+ { name: "brace_style", value: "'collapse'" },
+ { name: "operator_position", value: "'before-newline'" }
+ ],
+ groups: [{
+ name: "Unicode Support",
+ description: "",
+ tests: [{
+ unchanged: "var ' + unicode_char(3232) + '_' + unicode_char(3232) + ' = \"hi\";"
+ }, {
+ unchanged: [
+ "var ' + unicode_char(228) + 'x = {",
+ " ' + unicode_char(228) + 'rgerlich: true",
+ "};"
+ ]
+ }]
+ }, {
+ name: "Test template and continuation strings",
+ description: "",
+ tests: [
+ { unchanged: '`This is a ${template} string.`' },
+ { unchanged: '`This\n is\n a\n ${template}\n string.`' },
+ { unchanged: 'a = `This is a continuation\\\\\nstring.`' },
+ { unchanged: 'a = "This is a continuation\\\\\nstring."' },
+ { unchanged: '`SELECT\n nextval(\\\'${this.options.schema ? `${this.options.schema}.` : \\\'\\\'}"${this.tableName}_${this.autoIncrementField}_seq"\\\'::regclass\n ) nextval;`' },
+ {
+ comment: 'Tests for #1030',
+ unchanged: [
+ 'const composeUrl = (host) => {',
+ ' return `${host `test`}`;',
+ '};'
+ ]
+ }, {
+ unchanged: [
+ 'const composeUrl = (host, api, key, data) => {',
+ ' switch (api) {',
+ ' case "Init":',
+ ' return `${host}/vwapi/Init?VWID=${key}&DATA=${encodeURIComponent(',
+ ' Object.keys(data).map((k) => `${k}=${ data[k]}` ).join(";")',
+ ' )}`;',
+ ' case "Pay":',
+ ' return `${host}/vwapi/Pay?SessionId=${par}`;',
+ ' };',
+ '};'
+ ]
+ }
+ ]
+ }, {
+ name: "ES7 Decorators",
+ description: "Permit ES7 decorators, which are invoked with a leading \"@\".",
+ tests: [
+ { unchanged: '@foo' },
+ { unchanged: '@foo(bar)' },
+ {
+ unchanged: [
+ '@foo(function(k, v) {',
+ ' implementation();',
+ '})'
+ ]
+ }
+ ]
+ }, {
+ name: "ES7 exponential",
+ description: "ES7 exponential",
+ tests: [
+ { unchanged: 'x ** 2' },
+ { unchanged: 'x ** -2' }
+ ]
+ }, {
+ name: "Spread operator",
+ description: "Spread operator",
+ options: [
+ { name: 'brace_style', value: '"collapse,preserve-inline"' }
+ ],
+ tests: [
+ { unchanged: 'const m = { ...item, c: 3 };' },
+ { unchanged: 'const m = {\n ...item,\n c: 3\n};' },
+ { unchanged: 'const m = { c: 3, ...item };' },
+ { unchanged: 'const m = [...item, 3];' },
+ { unchanged: 'const m = [3, ...item];' }
+ ]
+ }, {
+ name: "Object literal shorthand functions",
+ description: "Object literal shorthand functions",
+ tests: [
+ { unchanged: 'return {\n foo() {\n return 42;\n }\n}' },
+ {
+ unchanged: [
+ 'var foo = {',
+ ' * bar() {',
+ ' yield 42;',
+ ' }',
+ '};'
+ ]
+ },
+ {
+ input: 'var foo = {bar(){return 42;},*barGen(){yield 42;}};',
+ output: ['var foo = {',
+ ' bar() {',
+ ' return 42;',
+ ' },',
+ ' * barGen() {',
+ ' yield 42;',
+ ' }',
+ '};'
+ ]
+ }, {
+ comment: 'also handle generator shorthand in class - #1013',
+ unchanged: [
+ 'class A {',
+ ' fn() {',
+ ' return true;',
+ ' }',
+ '',
+ ' * gen() {',
+ ' return true;',
+ ' }',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'class A {',
+ ' * gen() {',
+ ' return true;',
+ ' }',
+ '',
+ ' fn() {',
+ ' return true;',
+ ' }',
+ '}'
+ ]
+ }
+ ]
+ }, {
+ name: "End With Newline",
+ description: "",
+ matrix: [{
+ options: [
+ { name: "end_with_newline", value: "true" }
+ ],
+ eof: '\n'
+ }, {
+ options: [
+ { name: "end_with_newline", value: "false" }
+ ],
+ eof: ''
+ }
+
+ ],
+ tests: [
+ { fragment: true, input: '', output: '{{eof}}' },
+ { fragment: true, input: ' return .5', output: ' return .5{{eof}}' },
+ { fragment: true, input: ' \n\nreturn .5\n\n\n\n', output: ' return .5{{eof}}' },
+ { fragment: true, input: '\n', output: '{{eof}}' }
+ ],
+ }, {
+ name: "Support simple language specific option inheritance/overriding",
+ description: "Support simple language specific option inheritance/overriding",
+ matrix: [{
+ options: [
+ { name: "js", value: "{ 'indent_size': 3 }" },
+ { name: "css", value: "{ 'indent_size': 5 }" }
+ ],
+ j: ' '
+ },
+ {
+ options: [
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 } }" }
+ ],
+ j: ' '
+ },
+ {
+ options: [
+ { name: "indent_size", value: "9" },
+ { name: "html", value: "{ 'js': { 'indent_size': 3 }, 'css': { 'indent_size': 5 }, 'indent_size': 2}" },
+ { name: "js", value: "{ 'indent_size': 4 }" },
+ { name: "css", value: "{ 'indent_size': 3 }" }
+ ],
+ j: ' '
+ }
+ ],
+ tests: [{
+ unchanged: [
+ 'if (a == b) {',
+ '{{j}}test();',
+ '}'
+ ]
+ }, ]
+ }, {
+ name: "Brace style permutations",
+ description: "",
+ template: "< >",
+ matrix: [
+ // brace_style collapse,preserve-inline - Should preserve if no newlines
+ {
+ options: [
+ { name: "brace_style", value: "'collapse,preserve-inline'" }
+ ],
+ ibo: '',
+ iao: '',
+ ibc: '',
+ iac: '',
+ obo: ' ',
+ oao: ' ',
+ obc: ' ',
+ oac: ' '
+ },
+ {
+ options: [
+ { name: "brace_style", value: "'collapse,preserve-inline'" }
+ ],
+ ibo: '\n',
+ iao: '\n',
+ ibc: '\n',
+ iac: '\n',
+ obo: ' ',
+ oao: '\n ',
+ obc: '\n',
+ oac: ' '
+ },
+
+ // brace_style collapse - Shouldn't preserve if no newlines (uses collapse styling)
+ {
+ options: [
+ { name: "brace_style", value: "'collapse'" }
+ ],
+ ibo: '',
+ iao: '',
+ ibc: '',
+ iac: '',
+ obo: ' ',
+ oao: '\n ',
+ obc: '\n',
+ oac: ' '
+ },
+ {
+ options: [
+ { name: "brace_style", value: "'collapse'" }
+ ],
+ ibo: '\n',
+ iao: '\n',
+ ibc: '\n',
+ iac: '\n',
+ obo: ' ',
+ oao: '\n ',
+ obc: '\n',
+ oac: ' '
+ },
+ ],
+ tests: [{
+ input: 'var a ={a: 2};\nvar a ={a: 2};',
+ output: 'var a ={a: 2};\nvar a ={a: 2};'
+ },
+ // {
+ // input: 'var a ={a:{a:{a:2}}};\nvar a ={a:{a:{a:2}}};',
+ // output: 'var a ={a:{a:{a: 2}}};\nvar a ={a:{a:{a: 2}}};'
+ // },
+ {
+ input: '//case 1\nif (a == 1){}\n//case 2\nelse if (a == 2){}',
+ output: '//case 1\nif (a == 1){}\n//case 2\nelse if (a == 2){}'
+ },
+ {
+ input: 'if(1){2}else{3}',
+ output: 'if (1){2}else{3}'
+ },
+ {
+ input: 'try{a();}' +
+ 'catch(b){c();}' +
+ 'catch(d){}' +
+ 'finally{e();}',
+ output:
+ // expected
+ 'try{a();}' +
+ 'catch (b){c();}' +
+ 'catch (d){}' +
+ 'finally{e();}'
+ }
+ ],
+ }, {
+ name: "Comma-first option",
+ description: "Put commas at the start of lines instead of the end",
+ matrix: [{
+ options: [
+ { name: "comma_first", value: "false" }
+ ],
+ c0: ',\n',
+ c1: ',\n ',
+ c2: ',\n ',
+ c3: ',\n ',
+ // edge cases where engine bails
+ f1: ' ,\n '
+ }, {
+ options: [
+ { name: "comma_first", value: "true" }
+ ],
+ c0: '\n, ',
+ c1: '\n , ',
+ c2: '\n , ',
+ c3: '\n , ',
+ // edge cases where engine bails
+ f1: ', '
+ }],
+ tests: [
+ { input: '{a:1, b:2}', output: "{\n a: 1{{c1}}b: 2\n}" },
+ { input: 'var a=1, b=c[d], e=6;', output: 'var a = 1{{c1}}b = c[d]{{c1}}e = 6;' },
+ { input: "for(var a=1,b=2,c=3;d<3;d++)\ne", output: "for (var a = 1, b = 2, c = 3; d < 3; d++)\n e" },
+ { input: "for(var a=1,b=2,\nc=3;d<3;d++)\ne", output: "for (var a = 1, b = 2{{c2}}c = 3; d < 3; d++)\n e" },
+ { unchanged: 'function foo() {\n return [\n "one"{{c2}}"two"\n ];\n}' },
+ { input: 'a=[[1,2],[4,5],[7,8]]', output: "a = [\n [1, 2]{{c1}}[4, 5]{{c1}}[7, 8]\n]" },
+ { input: 'a=[[1,2],[4,5],[7,8],]', output: "a = [\n [1, 2]{{c1}}[4, 5]{{c1}}[7, 8]{{c0}}]" },
+ {
+ input: 'a=[[1,2],[4,5],function(){},[7,8]]',
+ output: "a = [\n [1, 2]{{c1}}[4, 5]{{c1}}function() {}{{c1}}[7, 8]\n]"
+ },
+ {
+ input: 'a=[[1,2],[4,5],function(){},function(){},[7,8]]',
+ output: "a = [\n [1, 2]{{c1}}[4, 5]{{c1}}function() {}{{c1}}function() {}{{c1}}[7, 8]\n]"
+ },
+ {
+ input: 'a=[[1,2],[4,5],function(){},[7,8]]',
+ output: "a = [\n [1, 2]{{c1}}[4, 5]{{c1}}function() {}{{c1}}[7, 8]\n]"
+ },
+ {
+ input: 'a=[b,c,function(){},function(){},d]',
+ output: "a = [b, c, function() {}, function() {}, d]"
+ },
+ {
+ input: 'a=[b,c,\nfunction(){},function(){},d]',
+ output: "a = [b, c{{c1}}function() {}{{c1}}function() {}{{c1}}d\n]"
+ },
+ { input: 'a=[a[1],b[4],c[d[7]]]', output: "a = [a[1], b[4], c[d[7]]]" },
+ { input: '[1,2,[3,4,[5,6],7],8]', output: "[1, 2, [3, 4, [5, 6], 7], 8]" },
+
+ {
+ input: '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+ output: '[\n [\n ["1", "2"]{{c2}}["3", "4"]\n ]{{c1}}[\n ["5", "6", "7"]{{c2}}["8", "9", "0"]\n ]{{c1}}[\n ["1", "2", "3"]{{c2}}["4", "5", "6", "7"]{{c2}}["8", "9", "0"]\n ]\n]'
+ },
+ {
+ input: [
+ 'changeCollection.add({',
+ ' name: "Jonathan" // New line inserted after this line on every save',
+ ' , age: 25',
+ '});'
+ ],
+ output: [
+ 'changeCollection.add({',
+ ' name: "Jonathan" // New line inserted after this line on every save',
+ ' {{f1}}age: 25',
+ '});'
+ ]
+ },
+ {
+ input: [
+ 'changeCollection.add(',
+ ' function() {',
+ ' return true;',
+ ' },',
+ ' function() {',
+ ' return true;',
+ ' }',
+ ');'
+ ],
+ output: [
+ 'changeCollection.add(',
+ ' function() {',
+ ' return true;',
+ ' }{{c1}}function() {',
+ ' return true;',
+ ' }',
+ ');'
+ ]
+ },
+ ],
+ }, {
+ name: "Space in parens tests",
+ description: "put space inside parens",
+ matrix: [{
+ options: [
+ { name: "space_in_paren", value: "false" },
+ { name: "space_in_empty_paren", value: "false" },
+ ],
+ s: '',
+ e: '',
+ }, {
+ options: [
+ { name: "space_in_paren", value: "false" },
+ { name: "space_in_empty_paren", value: "true" },
+ ],
+ s: '',
+ e: '',
+ }, {
+ options: [
+ { name: "space_in_paren", value: "true" },
+ { name: "space_in_empty_paren", value: "false" },
+ ],
+ s: ' ',
+ e: '',
+ }, {
+ options: [
+ { name: "space_in_paren", value: "true" },
+ { name: "space_in_empty_paren", value: "true" },
+ ],
+ s: ' ',
+ e: ' ',
+ }],
+ tests: [{
+ input: 'if(p) foo(a,b);',
+ output: 'if ({{s}}p{{s}}) foo({{s}}a, b{{s}});'
+ },
+ {
+ input: 'try{while(true){willThrow()}}catch(result)switch(result){case 1:++result }',
+ output: 'try {\n while ({{s}}true{{s}}) {\n willThrow({{e}})\n }\n} catch ({{s}}result{{s}}) switch ({{s}}result{{s}}) {\n case 1:\n ++result\n}'
+ },
+ {
+ input: '((e/((a+(b)*c)-d))^2)*5;',
+ output: '({{s}}({{s}}e / ({{s}}({{s}}a + ({{s}}b{{s}}) * c{{s}}) - d{{s}}){{s}}) ^ 2{{s}}) * 5;'
+ },
+ {
+ input: 'function f(a,b) {if(a) b()}function g(a,b) {if(!a) b()}',
+ output: 'function f({{s}}a, b{{s}}) {\n if ({{s}}a{{s}}) b({{e}})\n}\n\nfunction g({{s}}a, b{{s}}) {\n if ({{s}}!a{{s}}) b({{e}})\n}'
+ },
+ {
+ input: 'a=[];',
+ output: 'a = [{{e}}];'
+ },
+ {
+ input: 'a=[b,c,d];',
+ output: 'a = [{{s}}b, c, d{{s}}];'
+ },
+ {
+ input: 'a= f[b];',
+ output: 'a = f[{{s}}b{{s}}];'
+ },
+ {
+ input: [
+ '{',
+ ' files: [ {',
+ ' expand: true,',
+ ' cwd: "www/gui/",',
+ ' src: [ "im/design_standards/*.*" ],',
+ ' dest: "www/gui/build"',
+ ' } ]',
+ '}'
+ ],
+ output: [
+ '{',
+ ' files: [{{s}}{',
+ ' expand: true,',
+ ' cwd: "www/gui/",',
+ ' src: [{{s}}"im/design_standards/*.*"{{s}}],',
+ ' dest: "www/gui/build"',
+ ' }{{s}}]',
+ '}'
+ ],
+ },
+ ],
+ }, {
+ name: "operator_position option - ensure no neswlines if preserve_newlines is false",
+ matrix: [{
+ options: [
+ { name: "operator_position", value: "'before-newline'" },
+ { name: "preserve_newlines", value: "false" }
+ ]
+ }, {
+ options: [
+ { name: "operator_position", value: "'after-newline'" },
+ { name: "preserve_newlines", value: "false" }
+ ]
+ }, {
+ options: [
+ { name: "operator_position", value: "'preserve-newline'" },
+ { name: "preserve_newlines", value: "false" }
+ ]
+ }],
+ tests: [{
+ unchanged: inputlib.operator_position.sanity
+ }, {
+ input: inputlib.operator_position.comprehensive,
+ output: inputlib.operator_position.sanity,
+ }]
+ }, {
+ name: "operator_position option - set to 'before-newline' (default value)",
+ tests: [{
+ comment: 'comprehensive, various newlines',
+ input: inputlib.operator_position.comprehensive,
+ output: [
+ 'var res = a + b -',
+ ' c /',
+ ' d * e %',
+ ' f;',
+ 'var res = g & h |',
+ ' i ^',
+ ' j;',
+ 'var res = (k &&',
+ ' l ||',
+ ' m) ?',
+ ' n :',
+ ' o;',
+ 'var res = p >>',
+ ' q <<',
+ ' r >>>',
+ ' s;',
+ 'var res = t',
+ '',
+ ' ===',
+ ' u !== v !=',
+ ' w ==',
+ ' x >=',
+ ' y <= z > aa <',
+ ' ab;',
+ 'ac +',
+ ' -ad'
+ ]
+ }, {
+ comment: 'colon special case',
+ input: inputlib.operator_position.colon_special_case,
+ output: [
+ 'var a = {',
+ ' b: bval,',
+ ' c: cval,',
+ ' d: dval',
+ '};',
+ 'var e = f ? g :',
+ ' h;',
+ 'var i = j ? k :',
+ ' l;'
+ ]
+ }, {
+ comment: 'catch-all, includes brackets and other various code',
+ input: inputlib.operator_position.catch_all,
+ output: [
+ 'var d = 1;',
+ 'if (a === b &&',
+ ' c) {',
+ ' d = (c * everything /',
+ ' something_else) %',
+ ' b;',
+ ' e',
+ ' += d;',
+ '',
+ '} else if (!(complex && simple) ||',
+ ' (emotion && emotion.name === "happy")) {',
+ ' cryTearsOfJoy(many ||',
+ ' anOcean ||',
+ ' aRiver);',
+ '}'
+ ]
+ }]
+ }, {
+ name: "operator_position option - set to 'after_newline'",
+ options: [{
+ name: "operator_position",
+ value: "'after-newline'"
+ }],
+ tests: [{
+ comment: 'comprehensive, various newlines',
+ input: inputlib.operator_position.comprehensive,
+ output: [
+ 'var res = a + b',
+ ' - c',
+ ' / d * e',
+ ' % f;',
+ 'var res = g & h',
+ ' | i',
+ ' ^ j;',
+ 'var res = (k',
+ ' && l',
+ ' || m)',
+ ' ? n',
+ ' : o;',
+ 'var res = p',
+ ' >> q',
+ ' << r',
+ ' >>> s;',
+ 'var res = t',
+ '',
+ ' === u !== v',
+ ' != w',
+ ' == x',
+ ' >= y <= z > aa',
+ ' < ab;',
+ 'ac',
+ ' + -ad'
+ ]
+ }, {
+ comment: 'colon special case',
+ input: inputlib.operator_position.colon_special_case,
+ output: [
+ 'var a = {',
+ ' b: bval,',
+ ' c: cval,',
+ ' d: dval',
+ '};',
+ 'var e = f ? g',
+ ' : h;',
+ 'var i = j ? k',
+ ' : l;'
+ ]
+ }, {
+ comment: 'catch-all, includes brackets and other various code',
+ input: inputlib.operator_position.catch_all,
+ output: [
+ 'var d = 1;',
+ 'if (a === b',
+ ' && c) {',
+ ' d = (c * everything',
+ ' / something_else)',
+ ' % b;',
+ ' e',
+ ' += d;',
+ '',
+ '} else if (!(complex && simple)',
+ ' || (emotion && emotion.name === "happy")) {',
+ ' cryTearsOfJoy(many',
+ ' || anOcean',
+ ' || aRiver);',
+ '}'
+ ]
+ }]
+ }, {
+ name: "operator_position option - set to 'preserve-newline'",
+ options: [{
+ name: "operator_position",
+ value: "'preserve-newline'"
+ }],
+ tests: [{
+ comment: 'comprehensive, various newlines',
+ input: inputlib.operator_position.comprehensive,
+ output: [
+ 'var res = a + b',
+ ' - c /',
+ ' d * e',
+ ' %',
+ ' f;',
+ 'var res = g & h',
+ ' | i ^',
+ ' j;',
+ 'var res = (k &&',
+ ' l',
+ ' || m) ?',
+ ' n',
+ ' : o;',
+ 'var res = p',
+ ' >> q <<',
+ ' r',
+ ' >>> s;',
+ 'var res = t',
+ '',
+ ' === u !== v',
+ ' !=',
+ ' w',
+ ' == x >=',
+ ' y <= z > aa <',
+ ' ab;',
+ 'ac +',
+ ' -ad'
+ ]
+ }, {
+ comment: 'colon special case',
+ input: inputlib.operator_position.colon_special_case,
+ output: [
+ 'var a = {',
+ ' b: bval,',
+ ' c: cval,',
+ ' d: dval',
+ '};',
+ 'var e = f ? g',
+ ' : h;',
+ 'var i = j ? k :',
+ ' l;'
+ ]
+ }, {
+ comment: 'catch-all, includes brackets and other various code',
+ unchanged: inputlib.operator_position.catch_all
+ }]
+ }, {
+ name: "Yield tests",
+ description: "ES6 yield tests",
+ tests: [
+ { unchanged: 'yield /foo\\\\//;' },
+ { unchanged: 'result = yield pgClient.query_(queryString);' },
+ { unchanged: 'yield [1, 2]' },
+ { unchanged: "yield* bar();" },
+ {
+ comment: "yield should have no space between yield and star",
+ input: "yield * bar();",
+ output: "yield* bar();"
+ },
+ {
+ comment: "yield should have space between star and generator",
+ input: "yield *bar();",
+ output: "yield* bar();"
+ }
+ ]
+ }, {
+ name: "Async / await tests",
+ description: "ES7 async / await tests",
+ tests: [
+ { unchanged: "async function foo() {}" },
+ { unchanged: "let w = async function foo() {}" },
+ { unchanged: "async function foo() {}\nvar x = await foo();" },
+ {
+ comment: "async function as an input to another function",
+ unchanged: "wrapper(async function foo() {})"
+ },
+ {
+ comment: "await on inline anonymous function. should have a space after await",
+ input_: "async function() {\n var w = await(async function() {\n return await foo();\n })();\n}",
+ output: "async function() {\n var w = await (async function() {\n return await foo();\n })();\n}"
+ },
+ {
+ comment: "ensure that this doesn't break anyone with the async library",
+ unchanged: "async.map(function(t) {})"
+ }
+ ]
+ }, {
+ name: "e4x - Test that e4x literals passed through when e4x-option is enabled",
+ description: "",
+ options: [
+ { name: 'e4x', value: true }
+ ],
+ tests: [
+ { input: 'xml=\n foo x ;', output: 'xml = \n foo x ;' },
+ { unchanged: ' ' },
+ { unchanged: ' ' },
+ { unchanged: ' ' },
+ { unchanged: ' ' },
+ { unchanged: ' ' },
+
+ {
+ comment: 'Handles inline expressions',
+ input: 'xml=<{a} b="c">\n foo x{a}>;',
+ output: 'xml = <{a} b="c">\n foo x{a}>;'
+ },
+ {
+ input: 'xml=<{a} b="c">\n \n foo x{a}>;',
+ output: 'xml = <{a} b="c">\n \n foo x{a}>;'
+ },
+ {
+ comment: 'xml literals with special characters in elem names - see http://www.w3.org/TR/REC-xml/#NT-NameChar',
+ unchanged: 'xml = <_:.valid.xml- _:.valid.xml-="123"/>;'
+ },
+ {
+ comment: 'xml literals with attributes without equal sign',
+ unchanged: 'xml = ;'
+ },
+
+ {
+ comment: 'Handles CDATA',
+ input: 'xml=\n foo x/]]>;',
+ output: 'xml = \n foo x/]]>;'
+ },
+ { input: 'xml=;', output: 'xml = ;' },
+ { input: 'xml= {}]]>;', output: 'xml = {}]]>;' },
+
+ {
+ comment: 'JSX - working jsx from http://prettydiff.com/unit_tests/beautification_javascript_jsx.txt',
+ unchanged: [
+ 'var ListItem = React.createClass({',
+ ' render: function() {',
+ ' return (',
+ ' ',
+ ' ',
+ ' this.props.item.name',
+ ' ',
+ ' ',
+ ' );',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'var List = React.createClass({',
+ ' renderList: function() {',
+ ' return this.props.items.map(function(item) {',
+ ' return ;',
+ ' });',
+ ' },',
+ '',
+ ' render: function() {',
+ ' return ',
+ ' this.renderList()',
+ ' ',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'var Mist = React.createClass({',
+ ' renderList: function() {',
+ ' return this.props.items.map(function(item) {',
+ ' return {item}} key={item.id} />;',
+ ' });',
+ ' }',
+ '});',
+ ]
+ },
+ {
+ unchanged: [
+ '// JSX',
+ 'var box = ',
+ ' {shouldShowAnswer(user) ?',
+ ' no : ',
+ ' Text Content',
+ ' }',
+ ' ;',
+ 'var a = function() {',
+ ' return asdf ;',
+ '};',
+ '',
+ 'var HelloMessage = React.createClass({',
+ ' render: function() {',
+ ' return Hello {this.props.name}
;',
+ ' }',
+ '});',
+ 'React.render( , mountNode);',
+ ]
+ },
+ {
+ unchanged: [
+ 'var Timer = React.createClass({',
+ ' getInitialState: function() {',
+ ' return {',
+ ' secondsElapsed: 0',
+ ' };',
+ ' },',
+ ' tick: function() {',
+ ' this.setState({',
+ ' secondsElapsed: this.state.secondsElapsed + 1',
+ ' });',
+ ' },',
+ ' componentDidMount: function() {',
+ ' this.interval = setInterval(this.tick, 1000);',
+ ' },',
+ ' componentWillUnmount: function() {',
+ ' clearInterval(this.interval);',
+ ' },',
+ ' render: function() {',
+ ' return (',
+ ' Seconds Elapsed: {this.state.secondsElapsed}
',
+ ' );',
+ ' }',
+ '});',
+ 'React.render( , mountNode);'
+ ]
+ },
+ {
+ unchanged: [
+ 'var TodoList = React.createClass({',
+ ' render: function() {',
+ ' var createItem = function(itemText) {',
+ ' return {itemText} ;',
+ ' };',
+ ' return {this.props.items.map(createItem)} ;',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'var TodoApp = React.createClass({',
+ ' getInitialState: function() {',
+ ' return {',
+ ' items: [],',
+ ' text: \\\'\\\'',
+ ' };',
+ ' },',
+ ' onChange: function(e) {',
+ ' this.setState({',
+ ' text: e.target.value',
+ ' });',
+ ' },',
+ ' handleSubmit: function(e) {',
+ ' e.preventDefault();',
+ ' var nextItems = this.state.items.concat([this.state.text]);',
+ ' var nextText = \\\'\\\';',
+ ' this.setState({',
+ ' items: nextItems,',
+ ' text: nextText',
+ ' });',
+ ' },',
+ ' render: function() {',
+ ' return (',
+ ' ',
+ '
TODO ',
+ ' ',
+ ' ',
+ ' ',
+ ' );',
+ ' }',
+ '});',
+ 'React.render( , mountNode);'
+ ]
+ },
+ {
+ input: [
+ 'var converter = new Showdown.converter();',
+ 'var MarkdownEditor = React.createClass({',
+ ' getInitialState: function() {',
+ ' return {value: \\\'Type some *markdown* here!\\\'};',
+ ' },',
+ ' handleChange: function() {',
+ ' this.setState({value: this.refs.textarea.getDOMNode().value});',
+ ' },',
+ ' render: function() {',
+ ' return (',
+ ' ',
+ '
Input ',
+ '
',
+ '
Output ',
+ '
',
+ '
',
+ ' );',
+ ' }',
+ '});',
+ 'React.render( , mountNode);'
+
+ ],
+ output: [
+ 'var converter = new Showdown.converter();',
+ 'var MarkdownEditor = React.createClass({',
+ ' getInitialState: function() {',
+ ' return {',
+ ' value: \\\'Type some *markdown* here!\\\'',
+ ' };',
+ ' },',
+ ' handleChange: function() {',
+ ' this.setState({',
+ ' value: this.refs.textarea.getDOMNode().value',
+ ' });',
+ ' },',
+ ' render: function() {',
+ ' return (',
+ ' ',
+ '
Input ',
+ '
',
+ '
Output ',
+ '
',
+ '
',
+ ' );',
+ ' }',
+ '});',
+ 'React.render( , mountNode);'
+ ]
+ },
+ {
+ comment: 'JSX - Not quite correct jsx formatting that still works',
+ input: [
+ 'var content = (',
+ ' ',
+ ' {/* child comment, put {} around */}',
+ ' ',
+ ' ',
+ ' );',
+ 'var qwer = A dropdown list Do Something Do Something Fun! Do Something Else ;',
+ 'render(dropdown);',
+ ],
+ output: [
+ 'var content = (',
+ ' ',
+ ' {/* child comment, put {} around */}',
+ ' ',
+ ' ',
+ ');',
+ 'var qwer = A dropdown list Do Something Do Something Fun! Do Something Else ;',
+ 'render(dropdown);',
+ ]
+ },
+ {
+ comment: [
+ "Handles messed up tags, as long as it isn't the same name",
+ "as the root tag. Also handles tags of same name as root tag",
+ "as long as nesting matches."
+ ],
+ input_: 'xml= ;',
+ output: 'xml = ;'
+ },
+
+ {
+ comment: [
+ "If xml is not terminated, the remainder of the file is treated",
+ "as part of the xml-literal (passed through unaltered)"
+ ],
+ fragment: true,
+ input_: 'xml=\nc \nc',
+ ' c ',
+ ' ',
+ ' );',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'let a = React.createClass({',
+ ' render() {',
+ ' return (',
+ ' ',
+ ' c ',
+ '
',
+ ' );',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'let a = React.createClass({',
+ ' render() {',
+ ' return (',
+ ' ',
+ ' c ',
+ '
',
+ ' );',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'let a = React.createClass({',
+ ' render() {',
+ ' return (',
+ ' <{e} className = {d}>',
+ ' c ',
+ ' {e}>',
+ ' );',
+ ' }',
+ '});'
+ ]
+ },
+ {
+ comment: 'Issue #914 - Multiline attribute in root tag',
+ unchanged: [
+ 'return (',
+ ' {',
+ ' e.preventDefault()',
+ ' onClick()',
+ ' }}>',
+ ' {children}',
+ ' ',
+ ');'
+ ]
+ },
+ {
+ unchanged: [
+ 'return (',
+ ' <{',
+ ' a + b',
+ ' } href="#"',
+ ' onClick={e => {',
+ ' e.preventDefault()',
+ ' onClick()',
+ ' }}>',
+ ' {children}',
+ ' {',
+ ' a + b',
+ ' }>',
+ ');'
+ ]
+ },
+ {
+ input: [
+ 'return (',
+ ' <{',
+ ' a + b',
+ ' } href="#"',
+ ' onClick={e => {',
+ ' e.preventDefault()',
+ ' onClick()',
+ ' }}>',
+ ' {children}',
+ ' {a + b}>',
+ ' );'
+ ],
+ output: [
+ 'return (',
+ ' <{',
+ ' a + b',
+ ' } href="#"',
+ ' onClick={e => {',
+ ' e.preventDefault()',
+ ' onClick()',
+ ' }}>',
+ ' {children}',
+ ' {a + b}>',
+ ');'
+ ]
+ }
+ ]
+ }, {
+ name: "e4x disabled",
+ description: "",
+ options: [
+ { name: 'e4x', value: false }
+ ],
+ tests: [{
+ input_: 'xml=\n foo x ;',
+ output: 'xml = < a b = "c" > < d / > < e >\n foo < /e>x ;'
+ }]
+ }, {
+ name: "Multiple braces",
+ description: "",
+ template: "^^^ $$$",
+ options: [],
+ tests: [
+ { input: '{{}/z/}', output: '{\n {}\n /z/\n}' }
+ ]
+ }, {
+ name: "Beautify preserve formatting",
+ description: "Allow beautifier to preserve sections",
+ tests: [
+ { unchanged: "/* beautify preserve:start */\n/* beautify preserve:end */" },
+ { unchanged: "/* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */" },
+ { unchanged: "var a = 1;\n/* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */" },
+ { unchanged: "/* beautify preserve:start */ {asdklgh;y;;{}dd2d}/* beautify preserve:end */" },
+ {
+ input_: "var a = 1;\n/* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */",
+ output: "var a = 1;\n/* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */"
+ },
+ {
+ input_: "var a = 1;\n /* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */",
+ output: "var a = 1;\n/* beautify preserve:start */\n var a = 1;\n/* beautify preserve:end */"
+ },
+ {
+ unchanged: [
+ 'var a = {',
+ ' /* beautify preserve:start */',
+ ' one : 1',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ ' /* beautify preserve:end */',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/* beautify preserve:start */',
+ ' one : 1,',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ '/* beautify preserve:end */',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify preserve:start */',
+ ' one : 1,',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ '/* beautify preserve:end */',
+ '};'
+ ]
+ },
+ {
+ comment: 'one space before and after required, only single spaces inside.',
+ input: [
+ 'var a = {',
+ '/* beautify preserve:start */',
+ ' one : 1,',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify preserve:start */',
+ ' one: 1,',
+ ' two: 2,',
+ ' three: 3,',
+ ' ten: 10',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/*beautify preserve:start*/',
+ ' one : 1,',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /*beautify preserve:start*/',
+ ' one: 1,',
+ ' two: 2,',
+ ' three: 3,',
+ ' ten: 10',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/*beautify preserve:start*/',
+ ' one : 1,',
+ ' two : 2,',
+ ' three : 3,',
+ ' ten : 10',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /*beautify preserve:start*/',
+ ' one: 1,',
+ ' two: 2,',
+ ' three: 3,',
+ ' ten: 10',
+ '};'
+ ]
+ },
+
+ {
+ comment: 'Directive: ignore',
+ unchanged: "/* beautify ignore:start */\n/* beautify ignore:end */"
+ },
+ { unchanged: "/* beautify ignore:start */\n var a,,,{ 1;\n/* beautify ignore:end */" },
+ { unchanged: "var a = 1;\n/* beautify ignore:start */\n var a = 1;\n/* beautify ignore:end */" },
+ { unchanged: "/* beautify ignore:start */ {asdklgh;y;+++;dd2d}/* beautify ignore:end */" },
+ {
+ input_: "var a = 1;\n/* beautify ignore:start */\n var a,,,{ 1;\n/* beautify ignore:end */",
+ output: "var a = 1;\n/* beautify ignore:start */\n var a,,,{ 1;\n/* beautify ignore:end */"
+ },
+ {
+ input_: "var a = 1;\n /* beautify ignore:start */\n var a,,,{ 1;\n/* beautify ignore:end */",
+ output: "var a = 1;\n/* beautify ignore:start */\n var a,,,{ 1;\n/* beautify ignore:end */"
+ },
+ {
+ unchanged: [
+ 'var a = {',
+ ' /* beautify ignore:start */',
+ ' one : 1',
+ ' two : 2,',
+ ' three : {',
+ ' ten : 10',
+ ' /* beautify ignore:end */',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/* beautify ignore:start */',
+ ' one : 1',
+ ' two : 2,',
+ ' three : {',
+ ' ten : 10',
+ '/* beautify ignore:end */',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify ignore:start */',
+ ' one : 1',
+ ' two : 2,',
+ ' three : {',
+ ' ten : 10',
+ '/* beautify ignore:end */',
+ '};'
+ ]
+ },
+ {
+ comment: 'Directives - multiple and interacting',
+ input: [
+ 'var a = {',
+ '/* beautify preserve:start */',
+ '/* beautify preserve:start */',
+ ' one : 1,',
+ ' /* beautify preserve:end */',
+ ' two : 2,',
+ ' three : 3,',
+ '/* beautify preserve:start */',
+ ' ten : 10',
+ '/* beautify preserve:end */',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify preserve:start */',
+ '/* beautify preserve:start */',
+ ' one : 1,',
+ ' /* beautify preserve:end */',
+ ' two: 2,',
+ ' three: 3,',
+ ' /* beautify preserve:start */',
+ ' ten : 10',
+ '/* beautify preserve:end */',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/* beautify ignore:start */',
+ ' one : 1',
+ ' /* beautify ignore:end */',
+ ' two : 2,',
+ '/* beautify ignore:start */',
+ ' three : {',
+ ' ten : 10',
+ '/* beautify ignore:end */',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify ignore:start */',
+ ' one : 1',
+ ' /* beautify ignore:end */',
+ ' two: 2,',
+ ' /* beautify ignore:start */',
+ ' three : {',
+ ' ten : 10',
+ '/* beautify ignore:end */',
+ '};'
+ ]
+ },
+ {
+ comment: 'Starts can occur together, ignore:end must occur alone.',
+ input: [
+ 'var a = {',
+ '/* beautify ignore:start */',
+ ' one : 1',
+ ' NOTE: ignore end block does not support starting other directives',
+ ' This does not match the ending the ignore...',
+ ' /* beautify ignore:end preserve:start */',
+ ' two : 2,',
+ '/* beautify ignore:start */',
+ ' three : {',
+ ' ten : 10',
+ ' ==The next comment ends the starting ignore==',
+ '/* beautify ignore:end */',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify ignore:start */',
+ ' one : 1',
+ ' NOTE: ignore end block does not support starting other directives',
+ ' This does not match the ending the ignore...',
+ ' /* beautify ignore:end preserve:start */',
+ ' two : 2,',
+ '/* beautify ignore:start */',
+ ' three : {',
+ ' ten : 10',
+ ' ==The next comment ends the starting ignore==',
+ '/* beautify ignore:end */',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/* beautify ignore:start preserve:start */',
+ ' one : {',
+ ' /* beautify ignore:end */',
+ ' two : 2,',
+ ' /* beautify ignore:start */',
+ ' three : {',
+ '/* beautify ignore:end */',
+ ' ten : 10',
+ ' // This is all preserved',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify ignore:start preserve:start */',
+ ' one : {',
+ ' /* beautify ignore:end */',
+ ' two : 2,',
+ ' /* beautify ignore:start */',
+ ' three : {',
+ '/* beautify ignore:end */',
+ ' ten : 10',
+ ' // This is all preserved',
+ '};'
+ ]
+ },
+ {
+ input: [
+ 'var a = {',
+ '/* beautify ignore:start preserve:start */',
+ ' one : {',
+ ' /* beautify ignore:end */',
+ ' two : 2,',
+ ' /* beautify ignore:start */',
+ ' three : {',
+ '/* beautify ignore:end */',
+ ' ten : 10,',
+ '/* beautify preserve:end */',
+ ' eleven: 11',
+ '};'
+ ],
+ output: [
+ 'var a = {',
+ ' /* beautify ignore:start preserve:start */',
+ ' one : {',
+ ' /* beautify ignore:end */',
+ ' two : 2,',
+ ' /* beautify ignore:start */',
+ ' three : {',
+ '/* beautify ignore:end */',
+ ' ten : 10,',
+ '/* beautify preserve:end */',
+ ' eleven: 11',
+ '};'
+ ]
+ },
+ ]
+ }, {
+ name: "Comments and tests",
+ description: "Comments should be in the right indent and not side-ffect.",
+ options: [],
+ tests: [{
+ comment: '#913',
+
+ unchanged: [
+ 'class test {',
+ ' method1() {',
+ ' let resp = null;',
+ ' }',
+ ' /**',
+ ' * @param {String} id',
+ ' */',
+ ' method2(id) {',
+ ' let resp2 = null;',
+ ' }',
+ '}'
+ ]
+ },
+ {
+ comment: '#1090',
+ unchanged: [
+ 'for (var i = 0; i < 20; ++i) // loop',
+ ' if (i % 3) {',
+ ' console.log(i);',
+ ' }',
+ 'console.log("done");',
+ ]
+ },
+ {
+ comment: '#1043',
+ unchanged: [
+ 'var o = {',
+ ' k: 0',
+ '}',
+ '// ...',
+ 'foo(o)',
+ ]
+ },
+ {
+ comment: '#713 and #964',
+ unchanged: [
+ 'Meteor.call("foo", bar, function(err, result) {',
+ ' Session.set("baz", result.lorem)',
+ '})',
+ '//blah blah',
+ ]
+ },
+ {
+ comment: '#815',
+ unchanged: [
+ 'foo()',
+ '// this is a comment',
+ 'bar()',
+ '',
+ 'const foo = 5',
+ '// comment',
+ 'bar()',
+ ]
+ },
+ {
+ comment: 'This shows current behavior. Note #1069 is not addressed yet.',
+ unchanged: [
+ 'if (modulus === 2) {',
+ ' // i might be odd here',
+ ' i += (i & 1);',
+ ' // now i is guaranteed to be even',
+ ' // this block is obviously about the statement above',
+ '',
+ ' // #1069 This should attach to the block below',
+ ' // this comment is about the block after it.',
+ '} else {',
+ ' // rounding up using integer arithmetic only',
+ ' if (i % modulus)',
+ ' i += modulus - (i % modulus);',
+ ' // now i is divisible by modulus',
+ ' // behavior of comments should be different for single statements vs block statements/expressions',
+ '}',
+ '',
+ 'if (modulus === 2)',
+ ' // i might be odd here',
+ ' i += (i & 1);',
+ '// now i is guaranteed to be even',
+ '// non-braced comments unindent immediately',
+ '',
+ '// this comment is about the block after it.',
+ 'else',
+ ' // rounding up using integer arithmetic only',
+ ' if (i % modulus)',
+ ' i += modulus - (i % modulus);',
+ '// behavior of comments should be different for single statements vs block statements/expressions',
+ ]
+ },
+
+ ]
+ }, {
+ name: "Template Formatting",
+ description: "Php () and underscore.js templating treated as strings.",
+ options: [],
+ tests: [
+ { unchanged: '=$view["name"]; ?>' },
+ { unchanged: 'a = = external() ?>;' },
+ {
+ unchanged: [
+ '");',
+ '}',
+ '?>'
+ ]
+ },
+ { unchanged: 'a = <%= external() %>;' }
+ ]
+ }, {
+ name: "jslint and space after anon function",
+ description: "jslint_happy and space_after_anon_function tests",
+ matrix: [{
+ options: [
+ { name: "jslint_happy", value: "true" },
+ { name: "space_after_anon_function", value: "true" }
+ ],
+ f: ' ',
+ c: ''
+ }, {
+ options: [
+ { name: "jslint_happy", value: "true" },
+ { name: "space_after_anon_function", value: "false" }
+ ],
+ f: ' ',
+ c: ''
+ }, {
+ options: [
+ { name: "jslint_happy", value: "false" },
+ { name: "space_after_anon_function", value: "true" }
+ ],
+ f: ' ',
+ c: ' '
+ }, {
+ options: [
+ { name: "jslint_happy", value: "false" },
+ { name: "space_after_anon_function", value: "false" }
+ ],
+ f: '',
+ c: ' '
+ }
+
+
+ ],
+ tests: [{
+ input_: 'a=typeof(x)',
+ output: 'a = typeof{{f}}(x)'
+ },
+ {
+ input_: 'x();\n\nfunction(){}',
+ output: 'x();\n\nfunction{{f}}() {}'
+ },
+ {
+ input_: 'x();\n\nvar x = {\nx: function(){}\n}',
+ output: 'x();\n\nvar x = {\n x: function{{f}}() {}\n}'
+ },
+ {
+ input_: 'function () {\n var a, b, c, d, e = [],\n f;\n}',
+ output: 'function{{f}}() {\n var a, b, c, d, e = [],\n f;\n}'
+ },
+
+ {
+ input_: 'switch(x) {case 0: case 1: a(); break; default: break}',
+ output: 'switch (x) {\n{{c}}case 0:\n{{c}}case 1:\n{{c}} a();\n{{c}} break;\n{{c}}default:\n{{c}} break\n}'
+ },
+ {
+ input: 'switch(x){case -1:break;case !y:break;}',
+ output: 'switch (x) {\n{{c}}case -1:\n{{c}} break;\n{{c}}case !y:\n{{c}} break;\n}'
+ },
+ {
+ comment: 'typical greasemonkey start',
+ fragment: true,
+ unchanged: '// comment 2\n(function{{f}}()'
+ },
+
+ {
+ input_: 'var a2, b2, c2, d2 = 0, c = function() {}, d = \\\'\\\';',
+ output: 'var a2, b2, c2, d2 = 0,\n c = function{{f}}() {},\n d = \\\'\\\';'
+ },
+ {
+ input_: 'var a2, b2, c2, d2 = 0, c = function() {},\nd = \\\'\\\';',
+ output: 'var a2, b2, c2, d2 = 0,\n c = function{{f}}() {},\n d = \\\'\\\';'
+ },
+ {
+ input_: 'var o2=$.extend(a);function(){alert(x);}',
+ output: 'var o2 = $.extend(a);\n\nfunction{{f}}() {\n alert(x);\n}'
+ },
+ { input: 'function*() {\n yield 1;\n}', output: 'function*{{f}}() {\n yield 1;\n}' },
+ { unchanged: 'function* x() {\n yield 1;\n}' },
+ ]
+ }, {
+ name: "Regression tests",
+ description: "Ensure specific bugs do not recur",
+ options: [],
+ tests: [{
+ comment: "Issue 241",
+ unchanged: [
+ 'obj',
+ ' .last({',
+ ' foo: 1,',
+ ' bar: 2',
+ ' });',
+ 'var test = 1;'
+ ]
+ },
+ {
+ unchanged: [
+ 'obj',
+ ' .last(a, function() {',
+ ' var test;',
+ ' });',
+ 'var test = 1;'
+ ]
+ },
+ {
+ unchanged: [
+ 'obj.first()',
+ ' .second()',
+ ' .last(function(err, response) {',
+ ' console.log(err);',
+ ' });'
+ ]
+ },
+ {
+ comment: "Issue 268 and 275",
+ unchanged: [
+ 'obj.last(a, function() {',
+ ' var test;',
+ '});',
+ 'var test = 1;'
+ ]
+ },
+ {
+ unchanged: [
+ 'obj.last(a,',
+ ' function() {',
+ ' var test;',
+ ' });',
+ 'var test = 1;'
+ ]
+ },
+ {
+ input: '(function() {if (!window.FOO) window.FOO || (window.FOO = function() {var b = {bar: "zort"};});})();',
+ output: [
+ '(function() {',
+ ' if (!window.FOO) window.FOO || (window.FOO = function() {',
+ ' var b = {',
+ ' bar: "zort"',
+ ' };',
+ ' });',
+ '})();'
+ ]
+ },
+ {
+ comment: "Issue 281",
+ unchanged: [
+ 'define(["dojo/_base/declare", "my/Employee", "dijit/form/Button",',
+ ' "dojo/_base/lang", "dojo/Deferred"',
+ '], function(declare, Employee, Button, lang, Deferred) {',
+ ' return declare(Employee, {',
+ ' constructor: function() {',
+ ' new Button({',
+ ' onClick: lang.hitch(this, function() {',
+ ' new Deferred().then(lang.hitch(this, function() {',
+ ' this.salary * 0.25;',
+ ' }));',
+ ' })',
+ ' });',
+ ' }',
+ ' });',
+ '});'
+ ]
+ },
+ {
+ unchanged: [
+ 'define(["dojo/_base/declare", "my/Employee", "dijit/form/Button",',
+ ' "dojo/_base/lang", "dojo/Deferred"',
+ ' ],',
+ ' function(declare, Employee, Button, lang, Deferred) {',
+ ' return declare(Employee, {',
+ ' constructor: function() {',
+ ' new Button({',
+ ' onClick: lang.hitch(this, function() {',
+ ' new Deferred().then(lang.hitch(this, function() {',
+ ' this.salary * 0.25;',
+ ' }));',
+ ' })',
+ ' });',
+ ' }',
+ ' });',
+ ' });'
+ ]
+ },
+ {
+ comment: "Issue 459",
+ unchanged: [
+ '(function() {',
+ ' return {',
+ ' foo: function() {',
+ ' return "bar";',
+ ' },',
+ ' bar: ["bar"]',
+ ' };',
+ '}());'
+ ]
+ },
+ {
+ comment: "Issue 505 - strings should end at newline unless continued by backslash",
+ unchanged: [
+ 'var name = "a;',
+ 'name = "b";'
+ ]
+ },
+ {
+ unchanged: [
+ 'var name = "a;\\\\',
+ ' name = b";'
+ ]
+ },
+ {
+ comment: "Issue 514 - some operators require spaces to distinguish them",
+ unchanged: 'var c = "_ACTION_TO_NATIVEAPI_" + ++g++ + +new Date;'
+ },
+ {
+ unchanged: 'var c = "_ACTION_TO_NATIVEAPI_" - --g-- - -new Date;'
+ },
+ {
+ comment: "Issue 440 - reserved words can be used as object property names",
+ unchanged: [
+ 'a = {',
+ ' function: {},',
+ ' "function": {},',
+ ' throw: {},',
+ ' "throw": {},',
+ ' var: {},',
+ ' "var": {},',
+ ' set: {},',
+ ' "set": {},',
+ ' get: {},',
+ ' "get": {},',
+ ' if: {},',
+ ' "if": {},',
+ ' then: {},',
+ ' "then": {},',
+ ' else: {},',
+ ' "else": {},',
+ ' yay: {}',
+ '};'
+ ]
+ },
+ {
+ comment: "Issue 331 - if-else with braces edge case",
+ input: 'if(x){a();}else{b();}if(y){c();}',
+ output: [
+ 'if (x) {',
+ ' a();',
+ '} else {',
+ ' b();',
+ '}',
+ 'if (y) {',
+ ' c();',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 485 - ensure function declarations behave the same in arrays as elsewhere",
+ unchanged: [
+ 'var v = ["a",',
+ ' function() {',
+ ' return;',
+ ' }, {',
+ ' id: 1',
+ ' }',
+ '];'
+ ]
+ },
+ {
+ unchanged: [
+ 'var v = ["a", function() {',
+ ' return;',
+ '}, {',
+ ' id: 1',
+ '}];'
+ ]
+ },
+ {
+ comment: "Issue 382 - initial totally cursory support for es6 module export",
+ unchanged: [
+ 'module "Even" {',
+ ' import odd from "Odd";',
+ ' export function sum(x, y) {',
+ ' return x + y;',
+ ' }',
+ ' export var pi = 3.141593;',
+ ' export default moduleName;',
+ '}'
+ ]
+ },
+ {
+ unchanged: [
+ 'module "Even" {',
+ ' export default function div(x, y) {}',
+ '}'
+ ]
+ },
+ {
+ comment: 'Issue 889 - export default { ... }',
+ unchanged: [
+ 'export default {',
+ ' func1() {},',
+ ' func2() {}',
+ ' func3() {}',
+ '}'
+ ]
+ },
+ {
+ unchanged: [
+ 'export default {',
+ ' a() {',
+ ' return 1;',
+ ' },',
+ ' b() {',
+ ' return 2;',
+ ' },',
+ ' c() {',
+ ' return 3;',
+ ' }',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 508",
+ unchanged: 'set["name"]'
+ },
+ {
+ unchanged: 'get["name"]'
+ },
+ {
+ fragmeent: true,
+ unchanged: [
+ 'a = {',
+ ' set b(x) {},',
+ ' c: 1,',
+ ' d: function() {}',
+ '};'
+ ]
+ },
+ {
+ fragmeent: true,
+ unchanged: [
+ 'a = {',
+ ' get b() {',
+ ' retun 0;',
+ ' },',
+ ' c: 1,',
+ ' d: function() {}',
+ '};'
+ ]
+ },
+ {
+ comment: "Issue 298 - do not under indent if/while/for condtionals experesions",
+ unchanged: [
+ '\\\'use strict\\\';',
+ 'if ([].some(function() {',
+ ' return false;',
+ ' })) {',
+ ' console.log("hello");',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 298 - do not under indent if/while/for condtionals experesions",
+ unchanged: [
+ '\\\'use strict\\\';',
+ 'if ([].some(function() {',
+ ' return false;',
+ ' })) {',
+ ' console.log("hello");',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 552 - Typescript? Okay... we didn't break it before, so try not to break it now.",
+ unchanged: [
+ 'class Test {',
+ ' blah: string[];',
+ ' foo(): number {',
+ ' return 0;',
+ ' }',
+ ' bar(): number {',
+ ' return 0;',
+ ' }',
+ '}'
+ ]
+ },
+ {
+ unchanged: [
+ 'interface Test {',
+ ' blah: string[];',
+ ' foo(): number {',
+ ' return 0;',
+ ' }',
+ ' bar(): number {',
+ ' return 0;',
+ ' }',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 583 - Functions with comments after them should still indent correctly.",
+ unchanged: [
+ 'function exit(code) {',
+ ' setTimeout(function() {',
+ ' phantom.exit(code);',
+ ' }, 0);',
+ ' phantom.onError = function() {};',
+ '}',
+ '// Comment'
+ ]
+ },
+ {
+ comment: "Issue 806 - newline arrow functions",
+ unchanged: [
+ 'a.b("c",',
+ ' () => d.e',
+ ')'
+ ]
+ },
+ {
+ comment: "Issue 810 - es6 object literal detection",
+ unchanged: [
+ 'function badFormatting() {',
+ ' return {',
+ ' a,',
+ ' b: c,',
+ ' d: e,',
+ ' f: g,',
+ ' h,',
+ ' i,',
+ ' j: k',
+ ' }',
+ '}',
+ '',
+ 'function goodFormatting() {',
+ ' return {',
+ ' a: b,',
+ ' c,',
+ ' d: e,',
+ ' f: g,',
+ ' h,',
+ ' i,',
+ ' j: k',
+ ' }',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 602 - ES6 object literal shorthand functions",
+ unchanged: [
+ 'return {',
+ ' fn1() {},',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'throw {',
+ ' fn1() {},',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'foo({',
+ ' fn1(a) {}',
+ ' fn2(a) {}',
+ '})'
+ ]
+ }, {
+ unchanged: [
+ 'foo("text", {',
+ ' fn1(a) {}',
+ ' fn2(a) {}',
+ '})'
+ ]
+ }, {
+ unchanged: [
+ 'oneArg = {',
+ ' fn1(a) {',
+ ' do();',
+ ' },',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'multiArg = {',
+ ' fn1(a, b, c) {',
+ ' do();',
+ ' },',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'noArgs = {',
+ ' fn1() {',
+ ' do();',
+ ' },',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'emptyFn = {',
+ ' fn1() {},',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'nested = {',
+ ' fns: {',
+ ' fn1() {},',
+ ' fn2() {}',
+ ' }',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'array = [{',
+ ' fn1() {},',
+ ' prop: val,',
+ ' fn2() {}',
+ '}]'
+ ]
+ }, {
+ unchanged: [
+ 'expr = expr ? expr : {',
+ ' fn1() {},',
+ ' fn2() {}',
+ '}'
+ ]
+ }, {
+ unchanged: [
+ 'strange = valid + {',
+ ' fn1() {},',
+ ' fn2() {',
+ ' return 1;',
+ ' }',
+ '}.fn2()'
+ ]
+ },
+ {
+ comment: "Issue 854 - Arrow function with statement block",
+ unchanged: [
+ 'test(() => {',
+ ' var a = {}',
+ '',
+ ' a.what = () => true ? 1 : 2',
+ '',
+ ' a.thing = () => {',
+ ' b();',
+ ' }',
+ '})'
+ ]
+ },
+ {
+ comment: "Issue 406 - Multiline array",
+ unchanged: [
+ 'var tempName = [',
+ ' "temp",',
+ ' process.pid,',
+ ' (Math.random() * 0x1000000000).toString(36),',
+ ' new Date().getTime()',
+ '].join("-");'
+ ]
+ },
+ {
+ comment: "Issue #996 - Input ends with backslash throws exception",
+ fragment: true,
+ unchanged: [
+ 'sd = 1;',
+ '/'
+ ]
+ },
+ {
+ comment: "Issue #1079 - unbraced if with comments should still look right",
+ unchanged: [
+ 'if (console.log)',
+ ' for (var i = 0; i < 20; ++i)',
+ ' if (i % 3)',
+ ' console.log(i);',
+ '// all done',
+ 'console.log("done");'
+ ]
+ },
+ {
+ comment: "Issue #1085 - function should not have blank line in a number of cases",
+ unchanged: [
+ 'var transformer =',
+ ' options.transformer ||',
+ ' globalSettings.transformer ||',
+ ' function(x) {',
+ ' return x;',
+ ' };'
+ ]
+ },
+ {
+ comment: "Issue #569 - function should not have blank line in a number of cases",
+ unchanged: [
+ '(function(global) {',
+ ' "use strict";',
+ '',
+ ' /* jshint ignore:start */',
+ ' include "somefile.js"',
+ ' /* jshint ignore:end */',
+ '}(this));'
+ ]
+ },
+ {
+ unchanged: [
+ 'function bindAuthEvent(eventName) {',
+ ' self.auth.on(eventName, function(event, meta) {',
+ ' self.emit(eventName, event, meta);',
+ ' });',
+ '}',
+ '["logged_in", "logged_out", "signed_up", "updated_user"].forEach(bindAuthEvent);',
+ '',
+ 'function bindBrowserEvent(eventName) {',
+ ' browser.on(eventName, function(event, meta) {',
+ ' self.emit(eventName, event, meta);',
+ ' });',
+ '}',
+ '["navigating"].forEach(bindBrowserEvent);'
+ ]
+ },
+ {
+ comment: "Issue #892 - new line between chained methods ",
+ unchanged: [
+ 'foo',
+ ' .who()',
+ '',
+ ' .knows()',
+ ' // comment',
+ ' .nothing() // comment',
+ '',
+ ' .more()'
+ ]
+ }
+ ]
+ }, {
+ name: "Test non-positionable-ops",
+ description: "Ensure specific bugs do not recur",
+ tests: [
+ { unchanged: 'a += 2;' },
+ { unchanged: 'a -= 2;' },
+ { unchanged: 'a *= 2;' },
+ { unchanged: 'a /= 2;' },
+ { unchanged: 'a %= 2;' },
+ { unchanged: 'a &= 2;' },
+ { unchanged: 'a ^= 2;' },
+ { unchanged: 'a |= 2;' },
+ { unchanged: 'a **= 2;' },
+ { unchanged: 'a <<= 2;' },
+ { unchanged: 'a >>= 2;' },
+ ]
+ }, {
+ //Relies on the tab being four spaces as default for the tests
+ name: "brace_style ,preserve-inline tests",
+ description: "brace_style *,preserve-inline varying different brace_styles",
+ template: "< >",
+ matrix: [
+ //test for all options of brace_style
+ {
+ options: [
+ { name: "brace_style", value: "'collapse,preserve-inline'" }
+ ],
+ obo: ' ',
+ obot: '', //Output Before Open curlybrace & Tab character
+ oao: '\n',
+ oaot: ' ', //Output After Open curlybrace & corresponding Tab
+ obc: '\n', //Output Before Close curlybrace
+ oac: ' ',
+ oact: '' //Output After Close curlybrace & corresponding Tab character
+ },
+ {
+ options: [
+ { name: "brace_style", value: "'expand,preserve-inline'" }
+ ],
+ obo: '\n',
+ obot: ' ',
+ oao: '\n',
+ oaot: ' ',
+ obc: '\n',
+ oac: '\n',
+ oact: ' '
+ },
+ {
+ options: [
+ { name: "brace_style", value: "'end-expand,preserve-inline'" }
+ ],
+ obo: ' ',
+ obot: '',
+ oao: '\n',
+ oaot: ' ',
+ obc: '\n',
+ oac: '\n',
+ oact: ' '
+ },
+ {
+ //None tries not to touch brace style so all the tests in this
+ //matrix were formatted as if they were collapse
+ options: [
+ { name: "brace_style", value: "'none,preserve-inline'" }
+ ],
+ obo: ' ',
+ obot: '',
+ oao: '\n',
+ oaot: ' ',
+ obc: '\n',
+ oac: ' ',
+ oact: ''
+ },
+ //Test for backward compatibility
+ {
+ options: [
+ { name: "brace_style", value: "'collapse-preserve-inline'" }
+ ],
+ //Equivalent to the output of the first test
+ obo: ' ',
+ obot: '',
+ oao: '\n',
+ oaot: ' ',
+ obc: '\n',
+ oac: ' ',
+ oact: ''
+ }
+ ],
+ tests: [
+ //Test single inline blocks
+ {
+ unchanged: 'import { asdf } from "asdf";'
+ },
+ {
+ unchanged: 'import { get } from "asdf";'
+ },
+ {
+ unchanged: 'function inLine() { console.log("oh em gee"); }'
+ },
+ {
+ unchanged: 'if (cancer) { console.log("Im sorry but you only have so long to live..."); }'
+ },
+ //Test more complex inliners
+ {
+ input: 'if (ding) { console.log("dong"); } else { console.log("dang"); }',
+ output: 'if (ding) { console.log("dong"); }else { console.log("dang"); }'
+ },
+ //Test complex mixes of the two
+ {
+ //The outer function and the third object (obj3) should not
+ //be preserved. All other objects should be
+ input: [
+ 'function kindaComplex() {',
+ ' var a = 2;',
+ ' var obj = {};',
+ ' var obj2 = { a: "a", b: "b" };',
+ ' var obj3 = {',
+ ' c: "c",',
+ ' d: "d",',
+ ' e: "e"',
+ ' };',
+ '}'
+ ],
+ output: [
+ 'function kindaComplex(){' + //NL in templates
+ 'var a = 2;',
+ ' var obj = {};',
+ ' var obj2 = { a: "a", b: "b" };',
+ ' var obj3 = {' + //NL in templates, Expand doesnt affect js objects
+ 'c: "c",',
+ ' d: "d",',
+ ' e: "e"' + //NL in templates
+ ' };' + //NL in templates
+ '}'
+ ]
+ },
+ {
+ //All inlines should be preserved, all non-inlines (specifically
+ //complex(), obj, and obj.b should not be preserved (and hence
+ //have the template spacing defined in output)
+ input: [
+ 'function complex() {',
+ ' console.log("wowe");',
+ ' (function() { var a = 2; var b = 3; })();',
+ ' $.each(arr, function(el, idx) { return el; });',
+ ' var obj = {',
+ ' a: function() { console.log("test"); },',
+ ' b() {',
+ ' console.log("test2");',
+ ' }',
+ ' };',
+ '}'
+
+ ],
+ output: [
+ 'function complex(){' + //NL in templates
+ 'console.log("wowe");',
+ ' (function() { var a = 2; var b = 3; })();',
+ ' $.each(arr, function(el, idx) { return el; });',
+ ' var obj = {' + //NL in templates
+ 'a: function() { console.log("test"); },',
+ ' b(){' + //NL in templates
+ 'console.log("test2");' +
+ ' }' + //NL in templates
+ ' };' + //NL in templates
+ '}'
+ ]
+ }
+ ]
+ }, {
+ name: "Destructured and related",
+ description: "Ensure specific bugs do not recur",
+ options: [
+ { name: "brace_style", value: "'collapse,preserve-inline'" }
+ ], //Issue 1052, now collapse,preserve-inline instead of collapse-preserve-inline
+ tests: [{
+ comment: "Issue 382 - import destructured ",
+ unchanged: [
+ 'module "Even" {',
+ ' import { odd, oddly } from "Odd";',
+ '}'
+ ]
+ },
+ {
+ unchanged: [
+ 'import defaultMember from "module-name";',
+ 'import * as name from "module-name";',
+ 'import { member } from "module-name";',
+ 'import { member as alias } from "module-name";',
+ 'import { member1, member2 } from "module-name";',
+ 'import { member1, member2 as alias2 } from "module-name";',
+ 'import defaultMember, { member, member2 } from "module-name";',
+ 'import defaultMember, * as name from "module-name";',
+ 'import "module-name";'
+ ]
+ },
+ {
+ comment: "Issue 858 - from is a keyword only after import",
+ unchanged: [
+ 'if (from < to) {',
+ ' from++;',
+ '} else {',
+ ' from--;',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 511 - destrutured",
+ unchanged: [
+ 'var { b, c } = require("../stores");',
+ 'var { ProjectStore } = require("../stores");',
+ '',
+ 'function takeThing({ prop }) {',
+ ' console.log("inner prop", prop)',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 315 - Short objects",
+ unchanged: [
+ 'var a = { b: { c: { d: e } } };'
+ ]
+ },
+ {
+ unchanged: [
+ 'var a = {',
+ ' b: {',
+ ' c: { d: e }',
+ ' c3: { d: e }',
+ ' },',
+ ' b2: { c: { d: e } }',
+ '};'
+ ]
+ },
+ {
+ comment: "Issue 370 - Short objects in array",
+ unchanged: [
+ 'var methods = [',
+ ' { name: "to" },',
+ ' { name: "step" },',
+ ' { name: "move" },',
+ ' { name: "min" },',
+ ' { name: "max" }',
+ '];'
+ ]
+ },
+ {
+ comment: "Issue 838 - Short objects in array",
+ unchanged: [
+ 'function(url, callback) {',
+ ' var script = document.createElement("script")',
+ ' if (true) script.onreadystatechange = function() {',
+ ' foo();',
+ ' }',
+ ' else script.onload = callback;',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue 578 - Odd indenting after function",
+ unchanged: [
+ 'function bindAuthEvent(eventName) {',
+ ' self.auth.on(eventName, function(event, meta) {',
+ ' self.emit(eventName, event, meta);',
+ ' });',
+ '}',
+ '["logged_in", "logged_out", "signed_up", "updated_user"].forEach(bindAuthEvent);',
+ ]
+ },
+ {
+ comment: "Issue #487 - some short expressions examples",
+ unchanged: [
+ 'if (a == 1) { a++; }',
+ 'a = { a: a };',
+ 'UserDB.findOne({ username: "xyz" }, function(err, user) {});',
+ 'import { fs } from "fs";'
+ ]
+ },
+ {
+ comment: "Issue #982 - Fixed return expression collapse-preserve-inline",
+ unchanged: [
+ 'function foo(arg) {',
+ ' if (!arg) { a(); }',
+ ' if (!arg) { return false; }',
+ ' if (!arg) { throw "inline"; }',
+ ' return true;',
+ '}'
+ ]
+ },
+ {
+ comment: "Issue #338 - Short expressions ",
+ unchanged: [
+ 'if (someCondition) { return something; }',
+ 'if (someCondition) {',
+ ' return something;',
+ '}',
+ 'if (someCondition) { break; }',
+ 'if (someCondition) {',
+ ' return something;',
+ '}'
+ ]
+ }
+ ]
+ }, {
+ // =======================================================
+ // New tests groups should be added above this line.
+ // Everything below is a work in progress - converting
+ // old test to generated form.
+ // =======================================================
+ name: "Old tests",
+ description: "Largely unorganized pile of tests",
+ options: [],
+ tests: [
+ { unchanged: '' },
+ { fragment: true, unchanged: ' return .5' },
+ { fragment: true, unchanged: ' return .5;\n a();' },
+ { fragment: true, unchanged: ' return .5;\n a();' },
+ { fragment: true, unchanged: ' return .5;\n a();' },
+ { fragment: true, unchanged: ' < div' },
+ { input: 'a = 1', output: 'a = 1' },
+ { input: 'a=1', output: 'a = 1' },
+ { unchanged: '(3) / 2' },
+ { unchanged: '["a", "b"].join("")' },
+ { unchanged: 'a();\n\nb();' },
+ { input: 'var a = 1 var b = 2', output: 'var a = 1\nvar b = 2' },
+ { input: 'var a=1, b=c[d], e=6;', output: 'var a = 1,\n b = c[d],\n e = 6;' },
+ { unchanged: 'var a,\n b,\n c;' },
+ { input: 'let a = 1 let b = 2', output: 'let a = 1\nlet b = 2' },
+ { input: 'let a=1, b=c[d], e=6;', output: 'let a = 1,\n b = c[d],\n e = 6;' },
+ { unchanged: 'let a,\n b,\n c;' },
+ { input: 'const a = 1 const b = 2', output: 'const a = 1\nconst b = 2' },
+ { input: 'const a=1, b=c[d], e=6;', output: 'const a = 1,\n b = c[d],\n e = 6;' },
+ { unchanged: 'const a,\n b,\n c;' },
+ { unchanged: 'a = " 12345 "' },
+ { unchanged: "a = \\' 12345 \\'" },
+ { unchanged: 'if (a == 1) b = 2;' },
+ { input: 'if(1){2}else{3}', output: 'if (1) {\n 2\n} else {\n 3\n}' },
+ { input: 'if(1||2);', output: 'if (1 || 2);' },
+ { input: '(a==1)||(b==2)', output: '(a == 1) || (b == 2)' },
+ { input: 'var a = 1 if (2) 3;', output: 'var a = 1\nif (2) 3;' },
+ { unchanged: 'a = a + 1' },
+ { unchanged: 'a = a == 1' },
+ { unchanged: '/12345[^678]*9+/.match(a)' },
+ { unchanged: 'a /= 5' },
+ { unchanged: 'a = 0.5 * 3' },
+ { unchanged: 'a *= 10.55' },
+ { unchanged: 'a < .5' },
+ { unchanged: 'a <= .5' },
+ { input: 'a<.5', output: 'a < .5' },
+ { input: 'a<=.5', output: 'a <= .5' },
+
+ {
+ comment: 'exponent literals',
+ unchanged: 'a = 1e10'
+ },
+ { unchanged: 'a = 1.3e10' },
+ { unchanged: 'a = 1.3e-10' },
+ { unchanged: 'a = -12345.3e-10' },
+ { unchanged: 'a = .12345e-10' },
+ { unchanged: 'a = 06789e-10' },
+ { unchanged: 'a = e - 10' },
+ { unchanged: 'a = 1.3e+10' },
+ { unchanged: 'a = 1.e-7' },
+ { unchanged: 'a = -12345.3e+10' },
+ { unchanged: 'a = .12345e+10' },
+ { unchanged: 'a = 06789e+10' },
+ { unchanged: 'a = e + 10' },
+ { input: 'a=0e-12345.3e-10', output: 'a = 0e-12345 .3e-10' },
+ { input: 'a=0.e-12345.3e-10', output: 'a = 0.e-12345 .3e-10' },
+ { input: 'a=0x.e-12345.3e-10', output: 'a = 0x.e - 12345.3e-10' },
+ { input: 'a=0x0.e-12345.3e-10', output: 'a = 0x0.e - 12345.3e-10' },
+ { input: 'a=0x0.0e-12345.3e-10', output: 'a = 0x0 .0e-12345 .3e-10' },
+ { input: 'a=0g-12345.3e-10', output: 'a = 0 g - 12345.3e-10' },
+ { input: 'a=0.g-12345.3e-10', output: 'a = 0. g - 12345.3e-10' },
+ { input: 'a=0x.g-12345.3e-10', output: 'a = 0x.g - 12345.3e-10' },
+ { input: 'a=0x0.g-12345.3e-10', output: 'a = 0x0.g - 12345.3e-10' },
+ { input: 'a=0x0.0g-12345.3e-10', output: 'a = 0x0 .0 g - 12345.3e-10' },
+
+ {
+ comment: 'Decimal literals',
+ unchanged: 'a = 0123456789;'
+ },
+ { unchanged: 'a = 9876543210;' },
+ { unchanged: 'a = 5647308291;' },
+ { input: 'a=030e-5', output: 'a = 030e-5' },
+ { input: 'a=00+4', output: 'a = 00 + 4' },
+ { input: 'a=32+4', output: 'a = 32 + 4' },
+ { input: 'a=0.6g+4', output: 'a = 0.6 g + 4' },
+ { input: 'a=01.10', output: 'a = 01.10' },
+ { input: 'a=a.10', output: 'a = a .10' },
+ { input: 'a=00B0x0', output: 'a = 00 B0x0' },
+ { input: 'a=00B0xb0', output: 'a = 00 B0xb0' },
+ { input: 'a=00B0x0b0', output: 'a = 00 B0x0b0' },
+ { input: 'a=0090x0', output: 'a = 0090 x0' },
+ { input: 'a=0g0b0o0', output: 'a = 0 g0b0o0' },
+
+ {
+ comment: 'Hexadecimal literals',
+ unchanged: 'a = 0x0123456789abcdef;'
+ },
+ { unchanged: 'a = 0X0123456789ABCDEF;' },
+ { unchanged: 'a = 0xFeDcBa9876543210;' },
+ { input: 'a=0x30e-5', output: 'a = 0x30e - 5' },
+ { input: 'a=0xF0+4', output: 'a = 0xF0 + 4' },
+ { input: 'a=0Xff+4', output: 'a = 0Xff + 4' },
+ { input: 'a=0Xffg+4', output: 'a = 0Xff g + 4' },
+ { input: 'a=0x01.10', output: 'a = 0x01 .10' },
+ { unchanged: 'a = 0xb0ce;' },
+ { unchanged: 'a = 0x0b0;' },
+ { input: 'a=0x0B0x0', output: 'a = 0x0B0 x0' },
+ { input: 'a=0x0B0xb0', output: 'a = 0x0B0 xb0' },
+ { input: 'a=0x0B0x0b0', output: 'a = 0x0B0 x0b0' },
+ { input: 'a=0X090x0', output: 'a = 0X090 x0' },
+ { input: 'a=0Xg0b0o0', output: 'a = 0X g0b0o0' },
+
+ {
+ comment: 'Octal literals',
+ unchanged: 'a = 0o01234567;'
+ },
+ { unchanged: 'a = 0O01234567;' },
+ { unchanged: 'a = 0o34120675;' },
+ { input: 'a=0o30e-5', output: 'a = 0o30 e - 5' },
+ { input: 'a=0o70+4', output: 'a = 0o70 + 4' },
+ { input: 'a=0O77+4', output: 'a = 0O77 + 4' },
+ { input: 'a=0O778+4', output: 'a = 0O77 8 + 4' },
+ { input: 'a=0O77a+4', output: 'a = 0O77 a + 4' },
+ { input: 'a=0o01.10', output: 'a = 0o01 .10' },
+ { input: 'a=0o0B0x0', output: 'a = 0o0 B0x0' },
+ { input: 'a=0o0B0xb0', output: 'a = 0o0 B0xb0' },
+ { input: 'a=0o0B0x0b0', output: 'a = 0o0 B0x0b0' },
+ { input: 'a=0O090x0', output: 'a = 0O0 90 x0' },
+ { input: 'a=0Og0b0o0', output: 'a = 0O g0b0o0' },
+
+ {
+ comment: 'Binary literals',
+ unchanged: 'a = 0b010011;'
+ },
+ { unchanged: 'a = 0B010011;' },
+ { unchanged: 'a = 0b01001100001111;' },
+ { input: 'a=0b10e-5', output: 'a = 0b10 e - 5' },
+ { input: 'a=0b10+4', output: 'a = 0b10 + 4' },
+ { input: 'a=0B11+4', output: 'a = 0B11 + 4' },
+ { input: 'a=0B112+4', output: 'a = 0B11 2 + 4' },
+ { input: 'a=0B11a+4', output: 'a = 0B11 a + 4' },
+ { input: 'a=0b01.10', output: 'a = 0b01 .10' },
+ { input: 'a=0b0B0x0', output: 'a = 0b0 B0x0' },
+ { input: 'a=0b0B0xb0', output: 'a = 0b0 B0xb0' },
+ { input: 'a=0b0B0x0b0', output: 'a = 0b0 B0x0b0' },
+ { input: 'a=0B090x0', output: 'a = 0B0 90 x0' },
+ { input: 'a=0Bg0b0o0', output: 'a = 0B g0b0o0' },
+ { unchanged: 'a = [1, 2, 3, 4]' },
+ { input: 'F*(g/=f)*g+b', output: 'F * (g /= f) * g + b' },
+ { input: 'a.b({c:d})', output: 'a.b({\n c: d\n})' },
+ { input: 'a.b\n(\n{\nc:\nd\n}\n)', output: 'a.b({\n c: d\n})' },
+ { input: 'a.b({c:"d"})', output: 'a.b({\n c: "d"\n})' },
+ { input: 'a.b\n(\n{\nc:\n"d"\n}\n)', output: 'a.b({\n c: "d"\n})' },
+ { input: 'a=!b', output: 'a = !b' },
+ { input: 'a=!!b', output: 'a = !!b' },
+ { input: 'a?b:c', output: 'a ? b : c' },
+ { input: 'a?1:2', output: 'a ? 1 : 2' },
+ { input: 'a?(b):c', output: 'a ? (b) : c' },
+ { input: 'x={a:1,b:w=="foo"?x:y,c:z}', output: 'x = {\n a: 1,\n b: w == "foo" ? x : y,\n c: z\n}' },
+ { input: 'x=a?b?c?d:e:f:g;', output: 'x = a ? b ? c ? d : e : f : g;' },
+ { input: 'x=a?b?c?d:{e1:1,e2:2}:f:g;', output: 'x = a ? b ? c ? d : {\n e1: 1,\n e2: 2\n} : f : g;' },
+ { unchanged: 'function void(void) {}' },
+ { input: 'if(!a)foo();', output: 'if (!a) foo();' },
+ { input: 'a=~a', output: 'a = ~a' },
+ { input: 'a;/*comment*/b;', output: "a; /*comment*/\nb;" },
+ { input: 'a;/* comment */b;', output: "a; /* comment */\nb;" },
+ { fragment: true, input: 'a;/*\ncomment\n*/b;', output: "a;\n/*\ncomment\n*/\nb;", comment: "simple comments don't get touched at all" },
+ { input: 'a;/**\n* javadoc\n*/b;', output: "a;\n/**\n * javadoc\n */\nb;" },
+ { fragment: true, input: 'a;/**\n\nno javadoc\n*/b;', output: "a;\n/**\n\nno javadoc\n*/\nb;" },
+ { input: 'a;/*\n* javadoc\n*/b;', output: "a;\n/*\n * javadoc\n */\nb;", comment: 'comment blocks detected and reindented even w/o javadoc starter' },
+ { input: 'if(a)break;', output: "if (a) break;" },
+ { input: 'if(a){break}', output: "if (a) {\n break\n}" },
+ { input: 'if((a))foo();', output: 'if ((a)) foo();' },
+ { input: 'for(var i=0;;) a', output: 'for (var i = 0;;) a' },
+ { input: 'for(var i=0;;)\na', output: 'for (var i = 0;;)\n a' },
+ { unchanged: 'a++;' },
+ { input: 'for(;;i++)a()', output: 'for (;; i++) a()' },
+ { input: 'for(;;i++)\na()', output: 'for (;; i++)\n a()' },
+ { input: 'for(;;++i)a', output: 'for (;; ++i) a' },
+ { input: 'return(1)', output: 'return (1)' },
+ { input: 'try{a();}catch(b){c();}finally{d();}', output: "try {\n a();\n} catch (b) {\n c();\n} finally {\n d();\n}" },
+ { unchanged: '(xx)()', comment: ' magic function call' },
+ { unchanged: 'a[1]()', comment: 'another magic function call' },
+ { input: 'if(a){b();}else if(c) foo();', output: "if (a) {\n b();\n} else if (c) foo();" },
+ { input: 'switch(x) {case 0: case 1: a(); break; default: break}', output: "switch (x) {\n case 0:\n case 1:\n a();\n break;\n default:\n break\n}" },
+ { input: 'switch(x){case -1:break;case !y:break;}', output: 'switch (x) {\n case -1:\n break;\n case !y:\n break;\n}' },
+ { unchanged: 'a !== b' },
+ { input: 'if (a) b(); else c();', output: "if (a) b();\nelse c();" },
+ { unchanged: "// comment\n(function something() {})", comment: 'typical greasemonkey start' },
+ { unchanged: "{\n\n x();\n\n}", comment: 'duplicating newlines' },
+ { unchanged: 'if (a in b) foo();' },
+ { unchanged: 'if (a of b) foo();' },
+ { unchanged: 'if (a of [1, 2, 3]) foo();' },
+ {
+ input: 'if(X)if(Y)a();else b();else c();',
+ output: "if (X)\n if (Y) a();\n else b();\nelse c();"
+ },
+ { unchanged: 'if (foo) bar();\nelse break' },
+ { unchanged: 'var a, b;' },
+ { unchanged: 'var a = new function();' },
+ { fragment: true, unchanged: 'new function' },
+ { unchanged: 'var a, b' },
+ { input: '{a:1, b:2}', output: "{\n a: 1,\n b: 2\n}" },
+ { input: 'a={1:[-1],2:[+1]}', output: 'a = {\n 1: [-1],\n 2: [+1]\n}' },
+ { input: "var l = {\\'a\\':\\'1\\', \\'b\\':\\'2\\'}", output: "var l = {\n \\'a\\': \\'1\\',\n \\'b\\': \\'2\\'\n}" },
+ { unchanged: 'if (template.user[n] in bk) foo();' },
+ { unchanged: 'return 45' },
+ { unchanged: 'return this.prevObject ||\n\n this.constructor(null);' },
+ { unchanged: 'If[1]' },
+ { unchanged: 'Then[1]' },
+ { input: "a = 1;// comment", output: "a = 1; // comment" },
+ { unchanged: "a = 1; // comment" },
+ { input: "a = 1;\n // comment", output: "a = 1;\n// comment" },
+ { unchanged: 'a = [-1, -1, -1]' },
+
+ // These must work as non-fragments.
+ { unchanged: ['// a', '// b', '', '', '', '// c', '// d'] },
+ { unchanged: ['// func-comment', '', 'function foo() {}', '', '// end-func-comment'] },
+
+ {
+ comment: 'The exact formatting these should have is open for discussion, but they are at least reasonable',
+ unchanged: 'a = [ // comment\n -1, -1, -1\n]'
+ },
+ { unchanged: 'var a = [ // comment\n -1, -1, -1\n]' },
+ { unchanged: 'a = [ // comment\n -1, // comment\n -1, -1\n]' },
+ { unchanged: 'var a = [ // comment\n -1, // comment\n -1, -1\n]' },
+
+ { input: 'o = [{a:b},{c:d}]', output: 'o = [{\n a: b\n}, {\n c: d\n}]' },
+
+ {
+ comment: 'was: extra space appended',
+ unchanged: "if (a) {\n do();\n}"
+ },
+
+ {
+ comment: 'if/else statement with empty body',
+ input: "if (a) {\n// comment\n}else{\n// comment\n}",
+ output: "if (a) {\n // comment\n} else {\n // comment\n}"
+ },
+ { comment: 'multiple comments indentation', input: "if (a) {\n// comment\n// comment\n}", output: "if (a) {\n // comment\n // comment\n}" },
+ { input: "if (a) b() else c();", output: "if (a) b()\nelse c();" },
+ { input: "if (a) b() else if c() d();", output: "if (a) b()\nelse if c() d();" },
+
+ { unchanged: "{}" },
+ { unchanged: "{\n\n}" },
+ { input: "do { a(); } while ( 1 );", output: "do {\n a();\n} while (1);" },
+ { unchanged: "do {} while (1);" },
+ { input: "do {\n} while (1);", output: "do {} while (1);" },
+ { unchanged: "do {\n\n} while (1);" },
+ { unchanged: "var a = x(a, b, c)" },
+ { input: "delete x if (a) b();", output: "delete x\nif (a) b();" },
+ { input: "delete x[x] if (a) b();", output: "delete x[x]\nif (a) b();" },
+ { input: "for(var a=1,b=2)d", output: "for (var a = 1, b = 2) d" },
+ { input: "for(var a=1,b=2,c=3) d", output: "for (var a = 1, b = 2, c = 3) d" },
+ { input: "for(var a=1,b=2,c=3;d<3;d++)\ne", output: "for (var a = 1, b = 2, c = 3; d < 3; d++)\n e" },
+ { input: "function x(){(a||b).c()}", output: "function x() {\n (a || b).c()\n}" },
+ { input: "function x(){return - 1}", output: "function x() {\n return -1\n}" },
+ { input: "function x(){return ! a}", output: "function x() {\n return !a\n}" },
+ { unchanged: "x => x" },
+ { unchanged: "(x) => x" },
+ { input: "x => { x }", output: "x => {\n x\n}" },
+ { input: "(x) => { x }", output: "(x) => {\n x\n}" },
+
+ {
+ comment: 'a common snippet in jQuery plugins',
+ input_: "settings = $.extend({},defaults,settings);",
+ output: "settings = $.extend({}, defaults, settings);"
+ },
+
+ // reserved words used as property names
+ { unchanged: "$http().then().finally().default()" },
+ { input: "$http()\n.then()\n.finally()\n.default()", output: "$http()\n .then()\n .finally()\n .default()" },
+ { unchanged: "$http().when.in.new.catch().throw()" },
+ { input: "$http()\n.when\n.in\n.new\n.catch()\n.throw()", output: "$http()\n .when\n .in\n .new\n .catch()\n .throw()" },
+
+ { input: '{xxx;}()', output: '{\n xxx;\n}()' },
+
+ { unchanged: "a = \\'a\\'\nb = \\'b\\'" },
+ { unchanged: "a = /reg/exp" },
+ { unchanged: "a = /reg/" },
+ { unchanged: '/abc/.test()' },
+ { unchanged: '/abc/i.test()' },
+ { input: "{/abc/i.test()}", output: "{\n /abc/i.test()\n}" },
+ { input: 'var x=(a)/a;', output: 'var x = (a) / a;' },
+
+ { unchanged: 'x != -1' },
+
+ { input: 'for (; s-->0;)t', output: 'for (; s-- > 0;) t' },
+ { input: 'for (; s++>0;)u', output: 'for (; s++ > 0;) u' },
+ { input: 'a = s++>s--;', output: 'a = s++ > s--;' },
+ { input: 'a = s++>--s;', output: 'a = s++ > --s;' },
+
+ { input: '{x=#1=[]}', output: '{\n x = #1=[]\n}' },
+ { input: '{a:#1={}}', output: '{\n a: #1={}\n}' },
+ { input: '{a:#1#}', output: '{\n a: #1#\n}' },
+
+ { fragment: true, unchanged: '"incomplete-string' },
+ { fragment: true, unchanged: "\\'incomplete-string" },
+ { fragment: true, unchanged: '/incomplete-regex' },
+ { fragment: true, unchanged: '`incomplete-template-string' },
+
+ { fragment: true, input: '{a:1},{a:2}', output: '{\n a: 1\n}, {\n a: 2\n}' },
+ { fragment: true, input: 'var ary=[{a:1}, {a:2}];', output: 'var ary = [{\n a: 1\n}, {\n a: 2\n}];' },
+
+ { comment: 'incomplete', fragment: true, input: '{a:#1', output: '{\n a: #1' },
+ { comment: 'incomplete', fragment: true, input: '{a:#', output: '{\n a: #' },
+
+ { comment: 'incomplete', fragment: true, input: '}}}', output: '}\n}\n}' },
+
+ { fragment: true, unchanged: '' },
+
+ { comment: 'incomplete regexp', fragment: true, input: 'a=/regexp', output: 'a = /regexp' },
+
+ { input: '{a:#1=[],b:#1#,c:#999999#}', output: '{\n a: #1=[],\n b: #1#,\n c: #999999#\n}' },
+
+ { input: "do{x()}while(a>1)", output: "do {\n x()\n} while (a > 1)" },
+
+ { input: "x(); /reg/exp.match(something)", output: "x();\n/reg/exp.match(something)" },
+
+ { fragment: true, input: "something();(", output: "something();\n(" },
+ { fragment: true, input: "#!she/bangs, she bangs\nf=1", output: "#!she/bangs, she bangs\n\nf = 1" },
+ { fragment: true, input: "#!she/bangs, she bangs\n\nf=1", output: "#!she/bangs, she bangs\n\nf = 1" },
+ { fragment: true, unchanged: "#!she/bangs, she bangs\n\n/* comment */" },
+ { fragment: true, unchanged: "#!she/bangs, she bangs\n\n\n/* comment */" },
+ { fragment: true, unchanged: "#" },
+ { fragment: true, unchanged: "#!" },
+
+ { unchanged: "function namespace::something()" },
+
+ { fragment: true, unchanged: "" },
+ { fragment: true, input: "", output: "" },
+
+ { input: '{foo();--bar;}', output: '{\n foo();\n --bar;\n}' },
+ { input: '{foo();++bar;}', output: '{\n foo();\n ++bar;\n}' },
+ { input: '{--bar;}', output: '{\n --bar;\n}' },
+ { input: '{++bar;}', output: '{\n ++bar;\n}' },
+ { input: 'if(true)++a;', output: 'if (true) ++a;' },
+ { input: 'if(true)\n++a;', output: 'if (true)\n ++a;' },
+ { input: 'if(true)--a;', output: 'if (true) --a;' },
+ { input: 'if(true)\n--a;', output: 'if (true)\n --a;' },
+ { unchanged: 'elem[array]++;' },
+ { unchanged: 'elem++ * elem[array]++;' },
+ { unchanged: 'elem-- * -elem[array]++;' },
+ { unchanged: 'elem-- + elem[array]++;' },
+ { unchanged: 'elem-- - elem[array]++;' },
+ { unchanged: 'elem-- - -elem[array]++;' },
+ { unchanged: 'elem-- - +elem[array]++;' },
+
+
+ {
+ comment: 'Handling of newlines around unary ++ and -- operators',
+ input: '{foo\n++bar;}',
+ output: '{\n foo\n ++bar;\n}'
+ },
+ { input: '{foo++\nbar;}', output: '{\n foo++\n bar;\n}' },
+
+ {
+ comment: 'This is invalid, but harder to guard against. Issue #203.',
+ input: '{foo\n++\nbar;}',
+ output: '{\n foo\n ++\n bar;\n}'
+ },
+
+ {
+ comment: 'regexps',
+ input: 'a(/abc\\\\/\\\\/def/);b()',
+ output: "a(/abc\\\\/\\\\/def/);\nb()"
+ },
+ { input: 'a(/a[b\\\\[\\\\]c]d/);b()', output: "a(/a[b\\\\[\\\\]c]d/);\nb()" },
+ { comment: 'incomplete char class', fragment: true, unchanged: 'a(/a[b\\\\[' },
+
+ {
+ comment: 'allow unescaped / in char classes',
+ input: 'a(/[a/b]/);b()',
+ output: "a(/[a/b]/);\nb()"
+ },
+ { unchanged: 'typeof /foo\\\\//;' },
+ { unchanged: 'throw /foo\\\\//;' },
+ { unchanged: 'do /foo\\\\//;' },
+ { unchanged: 'return /foo\\\\//;' },
+ { unchanged: 'switch (a) {\n case /foo\\\\//:\n b\n}' },
+ { unchanged: 'if (a) /foo\\\\//\nelse /foo\\\\//;' },
+
+ { unchanged: 'if (foo) /regex/.test();' },
+ { unchanged: "for (index in [1, 2, 3]) /^test$/i.test(s)" },
+
+ { unchanged: 'function foo() {\n return [\n "one",\n "two"\n ];\n}' },
+ { input: 'a=[[1,2],[4,5],[7,8]]', output: "a = [\n [1, 2],\n [4, 5],\n [7, 8]\n]" },
+ {
+ input: 'a=[[1,2],[4,5],function(){},[7,8]]',
+ output: "a = [\n [1, 2],\n [4, 5],\n function() {},\n [7, 8]\n]"
+ },
+ {
+ input: 'a=[[1,2],[4,5],function(){},function(){},[7,8]]',
+ output: "a = [\n [1, 2],\n [4, 5],\n function() {},\n function() {},\n [7, 8]\n]"
+ },
+ {
+ input: 'a=[[1,2],[4,5],function(){},[7,8]]',
+ output: "a = [\n [1, 2],\n [4, 5],\n function() {},\n [7, 8]\n]"
+ },
+ {
+ input: 'a=[b,c,function(){},function(){},d]',
+ output: "a = [b, c, function() {}, function() {}, d]"
+ },
+ {
+ input: 'a=[b,c,\nfunction(){},function(){},d]',
+ output: "a = [b, c,\n function() {},\n function() {},\n d\n]"
+ },
+ { input: 'a=[a[1],b[4],c[d[7]]]', output: "a = [a[1], b[4], c[d[7]]]" },
+ { input: '[1,2,[3,4,[5,6],7],8]', output: "[1, 2, [3, 4, [5, 6], 7], 8]" },
+
+ {
+ input: '[[["1","2"],["3","4"]],[["5","6","7"],["8","9","0"]],[["1","2","3"],["4","5","6","7"],["8","9","0"]]]',
+ output: '[\n [\n ["1", "2"],\n ["3", "4"]\n ],\n [\n ["5", "6", "7"],\n ["8", "9", "0"]\n ],\n [\n ["1", "2", "3"],\n ["4", "5", "6", "7"],\n ["8", "9", "0"]\n ]\n]'
+ },
+
+ { input: '{[x()[0]];indent;}', output: '{\n [x()[0]];\n indent;\n}' },
+ { unchanged: '/*\n foo trailing space \n * bar trailing space \n**/' },
+ { unchanged: '{\n /*\n foo \n * bar \n */\n}' },
+
+ { unchanged: 'return ++i' },
+ { unchanged: 'return !!x' },
+ { unchanged: 'return !x' },
+ { input: 'return [1,2]', output: 'return [1, 2]' },
+ { unchanged: 'return;' },
+ { unchanged: 'return\nfunc' },
+ { input: 'catch(e)', output: 'catch (e)' },
+
+ {
+ input: 'var a=1,b={foo:2,bar:3},{baz:4,wham:5},c=4;',
+ output: 'var a = 1,\n b = {\n foo: 2,\n bar: 3\n },\n {\n baz: 4,\n wham: 5\n }, c = 4;'
+ },
+ {
+ input: 'var a=1,b={foo:2,bar:3},{baz:4,wham:5},\nc=4;',
+ output: 'var a = 1,\n b = {\n foo: 2,\n bar: 3\n },\n {\n baz: 4,\n wham: 5\n },\n c = 4;'
+ },
+
+ {
+ comment: 'inline comment',
+ input_: 'function x(/*int*/ start, /*string*/ foo)',
+ output: 'function x( /*int*/ start, /*string*/ foo)'
+ },
+
+ {
+ comment: 'javadoc comment',
+ input: '/**\n* foo\n*/',
+ output: '/**\n * foo\n */'
+ },
+ { input: '{\n/**\n* foo\n*/\n}', output: '{\n /**\n * foo\n */\n}' },
+
+ {
+ comment: 'starless block comment',
+ unchanged: '/**\nfoo\n*/'
+ },
+ { unchanged: '/**\nfoo\n**/' },
+ { unchanged: '/**\nfoo\nbar\n**/' },
+ { unchanged: '/**\nfoo\n\nbar\n**/' },
+ { unchanged: '/**\nfoo\n bar\n**/' },
+ { input: '{\n/**\nfoo\n*/\n}', output: '{\n /**\n foo\n */\n}' },
+ { input: '{\n/**\nfoo\n**/\n}', output: '{\n /**\n foo\n **/\n}' },
+ { input: '{\n/**\nfoo\nbar\n**/\n}', output: '{\n /**\n foo\n bar\n **/\n}' },
+ { input: '{\n/**\nfoo\n\nbar\n**/\n}', output: '{\n /**\n foo\n\n bar\n **/\n}' },
+ { input: '{\n/**\nfoo\n bar\n**/\n}', output: '{\n /**\n foo\n bar\n **/\n}' },
+ { unchanged: '{\n /**\n foo\nbar\n **/\n}' },
+
+ { input: 'var a,b,c=1,d,e,f=2;', output: 'var a, b, c = 1,\n d, e, f = 2;' },
+ { input: 'var a,b,c=[],d,e,f=2;', output: 'var a, b, c = [],\n d, e, f = 2;' },
+ { unchanged: 'function() {\n var a, b, c, d, e = [],\n f;\n}' },
+
+ { input: 'do/regexp/;\nwhile(1);', output: 'do /regexp/;\nwhile (1);' },
+ { input: 'var a = a,\na;\nb = {\nb\n}', output: 'var a = a,\n a;\nb = {\n b\n}' },
+
+ { unchanged: 'var a = a,\n /* c */\n b;' },
+ { unchanged: 'var a = a,\n // c\n b;' },
+
+ {
+ comment: 'weird element referencing',
+ unchanged: 'foo.("bar");'
+ },
+
+
+ { unchanged: 'if (a) a()\nelse b()\nnewline()' },
+ { unchanged: 'if (a) a()\nnewline()' },
+ { input: 'a=typeof(x)', output: 'a = typeof(x)' },
+
+ { unchanged: 'var a = function() {\n return null;\n },\n b = false;' },
+
+ { unchanged: 'var a = function() {\n func1()\n}' },
+ { unchanged: 'var a = function() {\n func1()\n}\nvar b = function() {\n func2()\n}' },
+
+ {
+ comment: 'code with and without semicolons',
+ input_: 'var whatever = require("whatever");\nfunction() {\n a = 6;\n}',
+ output: 'var whatever = require("whatever");\n\nfunction() {\n a = 6;\n}'
+ },
+ {
+ input: 'var whatever = require("whatever")\nfunction() {\n a = 6\n}',
+ output: 'var whatever = require("whatever")\n\nfunction() {\n a = 6\n}'
+ },
+
+ { input: '{"x":[{"a":1,"b":3},\n7,8,8,8,8,{"b":99},{"a":11}]}', output: '{\n "x": [{\n "a": 1,\n "b": 3\n },\n 7, 8, 8, 8, 8, {\n "b": 99\n }, {\n "a": 11\n }\n ]\n}' },
+ { input: '{"x":[{"a":1,"b":3},7,8,8,8,8,{"b":99},{"a":11}]}', output: '{\n "x": [{\n "a": 1,\n "b": 3\n }, 7, 8, 8, 8, 8, {\n "b": 99\n }, {\n "a": 11\n }]\n}' },
+
+ { input: '{"1":{"1a":"1b"},"2"}', output: '{\n "1": {\n "1a": "1b"\n },\n "2"\n}' },
+ { input: '{a:{a:b},c}', output: '{\n a: {\n a: b\n },\n c\n}' },
+
+ { input: '{[y[a]];keep_indent;}', output: '{\n [y[a]];\n keep_indent;\n}' },
+
+ { input: 'if (x) {y} else { if (x) {y}}', output: 'if (x) {\n y\n} else {\n if (x) {\n y\n }\n}' },
+
+ { unchanged: 'if (foo) one()\ntwo()\nthree()' },
+ { unchanged: 'if (1 + foo() && bar(baz()) / 2) one()\ntwo()\nthree()' },
+ { unchanged: 'if (1 + foo() && bar(baz()) / 2) one();\ntwo();\nthree();' },
+
+ { input: 'var a=1,b={bang:2},c=3;', output: 'var a = 1,\n b = {\n bang: 2\n },\n c = 3;' },
+ { input: 'var a={bing:1},b=2,c=3;', output: 'var a = {\n bing: 1\n },\n b = 2,\n c = 3;' },
+
+ ],
+ }],
+ examples: [{
+ // Example
+ group_name: "one",
+ description: "",
+ options: [],
+ values: [{
+ source: "", //string or array of lines
+ output: "" //string or array of lines
+ }]
+ }]
+};
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/generate-tests.js b/node_modules/js-beautify/test/generate-tests.js
new file mode 100644
index 0000000..2d00162
--- /dev/null
+++ b/node_modules/js-beautify/test/generate-tests.js
@@ -0,0 +1,216 @@
+#!/usr/bin/env node
+
+/*
+ The MIT License (MIT)
+
+ Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and 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.
+*/
+
+var fs = require('fs');
+var mustache = require('mustache');
+var path = require('path');
+
+function generate_tests() {
+ // javascript
+ generate_test_files('javascript', 'bt', 'js/test/generated/beautify-javascript-tests.js', 'python/jsbeautifier/tests/generated/tests.py');
+
+ // css
+ generate_test_files('css', 't', 'js/test/generated/beautify-css-tests.js', 'python/cssbeautifier/tests/generated/tests.py');
+
+ // html
+ // no python html beautifier, so no tests
+ generate_test_files('html', 'bth', 'js/test/generated/beautify-html-tests.js');
+}
+
+function generate_test_files(data_folder, test_method, node_output, python_output) {
+ var data_file_path, input_path, template_file_path;
+ var test_data, template;
+
+ input_path = path.resolve(__dirname, 'data', data_folder);
+ data_file_path = path.resolve(input_path, 'tests.js');
+ test_data = require(data_file_path).test_data;
+
+ template_file_path = path.resolve(input_path, 'node.mustache');
+ template = fs.readFileSync(template_file_path, { encoding: 'utf-8' });
+ set_formatters(test_data, test_method, '// ');
+ set_generated_header(test_data, data_file_path, template_file_path);
+ fs.writeFileSync(path.resolve(__dirname, '..', node_output),
+ mustache.render(template, test_data), { encoding: 'utf-8' });
+
+ if (python_output) {
+ template_file_path = path.resolve(input_path, 'python.mustache');
+ template = fs.readFileSync(template_file_path, { encoding: 'utf-8' });
+ set_formatters(test_data, test_method, '# ');
+ set_generated_header(test_data, data_file_path, template_file_path);
+ fs.writeFileSync(path.resolve(__dirname, '..', python_output),
+ mustache.render(template, test_data), { encoding: 'utf-8' });
+ }
+}
+
+function set_generated_header(data, data_file_path, template_file_path) {
+ var relative_script_path = path.relative(process.cwd(), __filename).split(path.sep).join('/');
+ var relative_data_file_path = path.relative(process.cwd(), data_file_path).split(path.sep).join('/');
+ var relative_template_file_path = path.relative(process.cwd(), template_file_path).split(path.sep).join('/');
+
+ data.header_text =
+ ' AUTO-GENERATED. DO NOT MODIFY.\n' +
+ ' Script: ' + relative_script_path + '\n' +
+ ' Template: ' + relative_template_file_path + '\n' +
+ ' Data: ' + relative_data_file_path;
+
+}
+
+function isStringOrArray(val) {
+ return typeof val === 'string' || val instanceof Array;
+}
+
+function getTestString(val) {
+ val = val.split('\n');
+
+ var result = "'" + val.join("\\n' +\n '").replace(/\t/g, '\\t') + "'";
+ result = result.replace(/' \+\n ''$/, "'");
+ return result;
+}
+
+function set_formatters(data, test_method, comment_mark) {
+
+ // utility mustache functions
+ data.matrix_context_string = function() {
+ var context = this;
+ return function(text, render) {
+ var outputs = [];
+ // text is ignored for this
+ for (var name in context) {
+ if (name === 'options') {
+ continue;
+ }
+
+ if (context.hasOwnProperty(name)) {
+ outputs.push(name + ' = "' + context[name].replace(/\n/g, '\\n').replace(/\t/g, '\\t') + '"');
+ }
+ }
+ return render(outputs.join(', '));
+ };
+ };
+
+ data.test_line = function() {
+ return function(text, render) {
+ var method_text = this.fragment ? 'test_fragment' : test_method;
+ var comment = '';
+ var before_input = method_text + '(';
+ var input = null;
+ var before_output = ', ';
+ var output = null;
+
+ // text is ignored for this.
+ if (typeof this.comment === 'string') {
+ this.comment = this.comment.split('\n');
+ }
+
+ if (this.comment instanceof Array) {
+ comment = '\n ' + comment_mark + this.comment.join('\n ' + comment_mark) + '\n ';
+ }
+
+ // input: the default field
+ // input_: allow underscore for formatting alignment with "output"
+ // unchanged: use "unchanged" instead of "input" if there is no output
+ input = this.input || this.input_ || this.unchanged;
+ if (input instanceof Array) {
+ input = input.join('\n');
+ }
+
+ if (isStringOrArray(this.output)) {
+ output = this.output;
+ if (output instanceof Array) {
+ output = output.join('\n');
+ }
+ }
+
+ // Do all most error checking
+ if (!(this.input !== null || this.input_ !== null || this.unchanged !== null)) {
+ throw "Missing test input field (input, input_, or unchanged).";
+ } else if ((this.input !== null && (this.input_ !== null || this.unchanged !== null)) &&
+ (this.input_ === null || this.unchanged === null)) {
+ throw "Only one test input field allowed (input, input_, or unchanged): " + input;
+ } else if (output && isStringOrArray(this.unchanged)) {
+ throw "Cannot specify 'output' with 'unchanged' test input: " + input;
+ } else if (!output && !isStringOrArray(this.unchanged)) {
+ throw "Neither 'output' nor 'unchanged' specified for test input: " + input;
+ } else if (input === output) {
+ // Raw input and output can be the same, just omit output.
+ throw "Test strings are identical. Omit 'output' and use 'unchanged': " + input;
+ }
+
+ if (output && output.indexOf('<%') !== -1) {
+ mustache.tags = ['<%', '%>'];
+ }
+
+ input = getTestString(render(input));
+
+ if (output) {
+ output = getTestString(render(output));
+ } else {
+ output = '';
+ }
+
+ if (output && output.indexOf('<%') !== -1) {
+ mustache.tags = ['{{', '}}'];
+ }
+
+ if (this.input_ || input.indexOf('\n') !== -1 || output.indexOf('\n') !== -1) {
+ before_input = method_text + '(\n ';
+ before_output = ',\n ' + comment_mark + ' -- output --\n ';
+ }
+ if (output === '') {
+ before_output = '';
+ }
+
+ // Rendered input and output can be the same, just omit output.
+ if (output === input) {
+ before_output = '';
+ output = '';
+ }
+ return comment + before_input + input + before_output + output + ')';
+ };
+ };
+
+ data.set_mustache_tags = function() {
+ return function( /* text, render */ ) {
+ if (this.template) {
+ mustache.tags = this.template.split(' ');
+ }
+ return '';
+ };
+ };
+
+ data.unset_mustache_tags = function() {
+ return function( /* text , render */ ) {
+ if (this.template) {
+ mustache.tags = ['{{', '}}'];
+ }
+ return '';
+ };
+ };
+}
+
+generate_tests();
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/resources/html-with-base64image.html b/node_modules/js-beautify/test/resources/html-with-base64image.html
new file mode 100644
index 0000000..c32bbc8
--- /dev/null
+++ b/node_modules/js-beautify/test/resources/html-with-base64image.html
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/resources/underscore-min.js b/node_modules/js-beautify/test/resources/underscore-min.js
new file mode 100644
index 0000000..11f1d96
--- /dev/null
+++ b/node_modules/js-beautify/test/resources/underscore-min.js
@@ -0,0 +1,6 @@
+// Underscore.js 1.7.0
+// http://underscorejs.org
+// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this);
+//# sourceMappingURL=underscore-min.map
\ No newline at end of file
diff --git a/node_modules/js-beautify/test/resources/underscore.js b/node_modules/js-beautify/test/resources/underscore.js
new file mode 100644
index 0000000..a253446
--- /dev/null
+++ b/node_modules/js-beautify/test/resources/underscore.js
@@ -0,0 +1,1439 @@
+// Underscore.js 1.7.0
+// http://underscorejs.org
+// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` in the browser, or `exports` on the server.
+ var root = this;
+
+ // Save the previous value of the `_` variable.
+ var previousUnderscore = root._;
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var
+ push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var
+ nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeBind = FuncProto.bind;
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for the old `require()` API. If we're in
+ // the browser, add `_` as a global object.
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.7.0';
+
+ // Internal function that returns an efficient (for current engines) version
+ // of the passed-in callback, to be repeatedly applied in other Underscore
+ // functions.
+ var optimizeCb = function(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1: return function(value) {
+ return func.call(context, value);
+ };
+ case 2: return function(value, other) {
+ return func.call(context, value, other);
+ };
+ case 3: return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+ };
+
+ // A mostly-internal function to generate callbacks that can be applied
+ // to each element in a collection, returning the desired result — either
+ // identity, an arbitrary callback, a property matcher, or a property accessor.
+ var cb = function(value, context, argCount) {
+ if (value == null) return _.identity;
+ if (_.isFunction(value)) return optimizeCb(value, context, argCount);
+ if (_.isObject(value)) return _.matches(value);
+ return _.property(value);
+ };
+ _.iteratee = function(value, context) {
+ return cb(value, context);
+ };
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles raw objects in addition to array-likes. Treats all
+ // sparse array-likes as if they were dense.
+ _.each = _.forEach = function(obj, iteratee, context) {
+ if (obj == null) return obj;
+ iteratee = optimizeCb(iteratee, context);
+ var i, length = obj.length;
+ if (length === +length) {
+ for (i = 0; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var keys = _.keys(obj);
+ for (i = 0, length = keys.length; i < length; i++) {
+ iteratee(obj[keys[i]], keys[i], obj);
+ }
+ }
+ return obj;
+ };
+
+ // Return the results of applying the iteratee to each element.
+ _.map = _.collect = function(obj, iteratee, context) {
+ if (obj == null) return [];
+ iteratee = cb(iteratee, context);
+ var keys = obj.length !== +obj.length && _.keys(obj),
+ length = (keys || obj).length,
+ results = Array(length),
+ currentKey;
+ for (var index = 0; index < length; index++) {
+ currentKey = keys ? keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ var reduceError = 'Reduce of empty array with no initial value';
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`.
+ _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) {
+ if (obj == null) obj = [];
+ iteratee = optimizeCb(iteratee, context, 4);
+ var keys = obj.length !== +obj.length && _.keys(obj),
+ length = (keys || obj).length,
+ index = 0, currentKey;
+ if (arguments.length < 3) {
+ if (!length) throw new TypeError(reduceError);
+ memo = obj[keys ? keys[index++] : index++];
+ }
+ for (; index < length; index++) {
+ currentKey = keys ? keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ // The right-associative version of reduce, also known as `foldr`.
+ _.reduceRight = _.foldr = function(obj, iteratee, memo, context) {
+ if (obj == null) obj = [];
+ iteratee = optimizeCb(iteratee, context, 4);
+ var keys = obj.length !== + obj.length && _.keys(obj),
+ index = (keys || obj).length,
+ currentKey;
+ if (arguments.length < 3) {
+ if (!index) throw new TypeError(reduceError);
+ memo = obj[keys ? keys[--index] : --index];
+ }
+ while (index--) {
+ currentKey = keys ? keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, predicate, context) {
+ var result;
+ predicate = cb(predicate, context);
+ _.some(obj, function(value, index, list) {
+ if (predicate(value, index, list)) {
+ result = value;
+ return true;
+ }
+ });
+ return result;
+ };
+
+ // Return all the elements that pass a truth test.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, predicate, context) {
+ var results = [];
+ if (obj == null) return results;
+ predicate = cb(predicate, context);
+ _.each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, predicate, context) {
+ return _.filter(obj, _.negate(cb(predicate)), context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, predicate, context) {
+ if (obj == null) return true;
+ predicate = cb(predicate, context);
+ var keys = obj.length !== +obj.length && _.keys(obj),
+ length = (keys || obj).length,
+ index, currentKey;
+ for (index = 0; index < length; index++) {
+ currentKey = keys ? keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Aliased as `any`.
+ _.some = _.any = function(obj, predicate, context) {
+ if (obj == null) return false;
+ predicate = cb(predicate, context);
+ var keys = obj.length !== +obj.length && _.keys(obj),
+ length = (keys || obj).length,
+ index, currentKey;
+ for (index = 0; index < length; index++) {
+ currentKey = keys ? keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+ };
+
+ // Determine if the array or object contains a given value (using `===`).
+ // Aliased as `include`.
+ _.contains = _.include = function(obj, target) {
+ if (obj == null) return false;
+ if (obj.length !== +obj.length) obj = _.values(obj);
+ return _.indexOf(obj, target) >= 0;
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = function(obj, method) {
+ var args = slice.call(arguments, 2);
+ var isFunc = _.isFunction(method);
+ return _.map(obj, function(value) {
+ return (isFunc ? method : value[method]).apply(value, args);
+ });
+ };
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, _.property(key));
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs) {
+ return _.filter(obj, _.matches(attrs));
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.find(obj, _.matches(attrs));
+ };
+
+ // Return the maximum element (or element-based computation).
+ _.max = function(obj, iteratee, context) {
+ var result = -Infinity, lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null && obj != null) {
+ obj = obj.length === +obj.length ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index, list) {
+ computed = iteratee(value, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = value;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iteratee, context) {
+ var result = Infinity, lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null && obj != null) {
+ obj = obj.length === +obj.length ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index, list) {
+ computed = iteratee(value, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = value;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Shuffle a collection, using the modern version of the
+ // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+ _.shuffle = function(obj) {
+ var set = obj && obj.length === +obj.length ? obj : _.values(obj);
+ var length = set.length;
+ var shuffled = Array(length);
+ for (var index = 0, rand; index < length; index++) {
+ rand = _.random(0, index);
+ if (rand !== index) shuffled[index] = shuffled[rand];
+ shuffled[rand] = set[index];
+ }
+ return shuffled;
+ };
+
+ // Sample **n** random values from a collection.
+ // If **n** is not specified, returns a single random element.
+ // The internal `guard` argument allows it to work with `map`.
+ _.sample = function(obj, n, guard) {
+ if (n == null || guard) {
+ if (obj.length !== +obj.length) obj = _.values(obj);
+ return obj[_.random(obj.length - 1)];
+ }
+ return _.shuffle(obj).slice(0, Math.max(0, n));
+ };
+
+ // Sort the object's values by a criterion produced by an iteratee.
+ _.sortBy = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ return _.pluck(_.map(obj, function(value, index, list) {
+ return {
+ value: value,
+ index: index,
+ criteria: iteratee(value, index, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(behavior) {
+ return function(obj, iteratee, context) {
+ var result = {};
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key].push(value); else result[key] = [value];
+ });
+
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
+ // when you know that your index values will be unique.
+ _.indexBy = group(function(result, value, key) {
+ result[key] = value;
+ });
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key]++; else result[key] = 1;
+ });
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0, high = array.length;
+ while (low < high) {
+ var mid = low + high >>> 1;
+ if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+ }
+ return low;
+ };
+
+ // Safely create a real, live array from anything iterable.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (obj.length === +obj.length) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return obj.length === +obj.length ? obj.length : _.keys(obj).length;
+ };
+
+ // Split a collection into two arrays: one whose elements all satisfy the given
+ // predicate, and one whose elements all do not satisfy the predicate.
+ _.partition = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var pass = [], fail = [];
+ _.each(obj, function(value, key, obj) {
+ (predicate(value, key, obj) ? pass : fail).push(value);
+ });
+ return [pass, fail];
+ };
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null) return void 0;
+ if (n == null || guard) return array[0];
+ return _.initial(array, array.length - n);
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N. The **guard** check allows it to work with
+ // `_.map`.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array. The **guard** check allows it to work with `_.map`.
+ _.last = function(array, n, guard) {
+ if (array == null) return void 0;
+ if (n == null || guard) return array[array.length - 1];
+ return _.rest(array, Math.max(0, array.length - n));
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array. The **guard**
+ // check allows it to work with `_.map`.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, _.identity);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, strict, startIndex) {
+ var output = [], idx = 0, value;
+ for (var i = startIndex || 0, length = input && input.length; i < length; i++) {
+ value = input[i];
+ if (value && value.length >= 0 && (_.isArray(value) || _.isArguments(value))) {
+ //flatten current level of array or arguments object
+ if (!shallow) value = flatten(value, shallow, strict);
+ var j = 0, len = value.length;
+ output.length += len;
+ while (j < len) {
+ output[idx++] = value[j++];
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+ };
+
+ // Flatten out an array, either recursively (by default), or just one level.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, false);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = function(array) {
+ return _.difference(array, slice.call(arguments, 1));
+ };
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iteratee, context) {
+ if (array == null) return [];
+ if (!_.isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = array.length; i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!_.contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!_.contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = function() {
+ return _.uniq(flatten(arguments, true, true));
+ };
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ if (array == null) return [];
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = array.length; i < length; i++) {
+ var item = array[i];
+ if (_.contains(result, item)) continue;
+ for (var j = 1; j < argsLength; j++) {
+ if (!_.contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = function(array) {
+ var rest = flatten(arguments, true, true, 1);
+ return _.filter(array, function(value){
+ return !_.contains(rest, value);
+ });
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = function(array) {
+ if (array == null) return [];
+ var length = _.max(arguments, 'length').length;
+ var results = Array(length);
+ while (length-- > 0) {
+ results[length] = _.pluck(arguments, length);
+ }
+ return results;
+ };
+
+ // Complement of _.zip. Unzip accepts an array of arrays and groups
+ // each array's elements on shared indices
+ _.unzip = function(array) {
+ return _.zip.apply(null, array);
+ };
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values.
+ _.object = function(list, values) {
+ if (list == null) return {};
+ var result = {};
+ for (var i = 0, length = list.length; i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // Return the position of the first occurrence of an item in an array,
+ // or -1 if the item is not included in the array.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = function(array, item, isSorted) {
+ var i = 0, length = array && array.length;
+ if (typeof isSorted == 'number') {
+ i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted;
+ } else if (isSorted) {
+ i = _.sortedIndex(array, item);
+ return array[i] === item ? i : -1;
+ }
+ for (; i < length; i++) if (array[i] === item) return i;
+ return -1;
+ };
+
+ _.lastIndexOf = function(array, item, from) {
+ var idx = array ? array.length : 0;
+ if (typeof from == 'number') {
+ idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1);
+ }
+ while (--idx >= 0) if (array[idx] === item) return idx;
+ return -1;
+ };
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (arguments.length <= 1) {
+ stop = start || 0;
+ start = 0;
+ }
+ step = step || 1;
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Reusable constructor function for prototype setting.
+ var Ctor = function(){};
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = function(func, context) {
+ var args, bound;
+ if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+ if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
+ args = slice.call(arguments, 2);
+ bound = function() {
+ if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
+ Ctor.prototype = func.prototype;
+ var self = new Ctor;
+ Ctor.prototype = null;
+ var result = func.apply(self, args.concat(slice.call(arguments)));
+ if (_.isObject(result)) return result;
+ return self;
+ };
+ return bound;
+ };
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context. _ acts
+ // as a placeholder, allowing any combination of arguments to be pre-filled.
+ _.partial = function(func) {
+ var boundArgs = slice.call(arguments, 1);
+ return function() {
+ var position = 0;
+ var args = boundArgs.slice();
+ for (var i = 0, length = args.length; i < length; i++) {
+ if (args[i] === _) args[i] = arguments[position++];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return func.apply(this, args);
+ };
+ };
+
+ // Bind a number of an object's methods to that object. Remaining arguments
+ // are the method names to be bound. Useful for ensuring that all callbacks
+ // defined on an object belong to it.
+ _.bindAll = function(obj) {
+ var i, length = arguments.length, key;
+ if (length <= 1) throw new Error('bindAll must be passed function names');
+ for (i = 1; i < length; i++) {
+ key = arguments[i];
+ obj[key] = _.bind(obj[key], obj);
+ }
+ return obj;
+ };
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = function(func, wait) {
+ var args = slice.call(arguments, 2);
+ return setTimeout(function(){
+ return func.apply(null, args);
+ }, wait);
+ };
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = function(func) {
+ return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+ };
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time. Normally, the throttled function will run
+ // as much as it can, without ever going more than once per `wait` duration;
+ // but if you'd like to disable the execution on the leading edge, pass
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
+ _.throttle = function(func, wait, options) {
+ var context, args, result;
+ var timeout = null;
+ var previous = 0;
+ if (!options) options = {};
+ var later = function() {
+ previous = options.leading === false ? 0 : _.now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+ return function() {
+ var now = _.now();
+ if (!previous && options.leading === false) previous = now;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, args, context, timestamp, result;
+
+ var later = function() {
+ var last = _.now() - timestamp;
+
+ if (last < wait && last >= 0) {
+ timeout = setTimeout(later, wait - last);
+ } else {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ }
+ }
+ };
+
+ return function() {
+ context = this;
+ args = arguments;
+ timestamp = _.now();
+ var callNow = immediate && !timeout;
+ if (!timeout) timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ context = args = null;
+ }
+
+ return result;
+ };
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return _.partial(wrapper, func);
+ };
+
+ // Returns a negated version of the passed-in predicate.
+ _.negate = function(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+ };
+
+ // Returns a function that will only be executed after being called N times.
+ _.after = function(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Returns a function that will only be executed before being called N times.
+ _.before = function(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ } else {
+ func = null;
+ }
+ return memo;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = _.partial(_.before, 2);
+
+ // Object Functions
+ // ----------------
+
+ // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+ var hasEnumBug = !({toString: null}).propertyIsEnumerable('toString');
+ var nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+ // Retrieve the names of an object's properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`
+ _.keys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var keys = [];
+ for (var key in obj) if (_.has(obj, key)) keys.push(key);
+
+ // Ahem, IE < 9.
+ if (hasEnumBug) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ while (nonEnumIdx--) {
+ var prop = nonEnumerableProps[nonEnumIdx];
+ if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
+ }
+ }
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[keys[i]];
+ }
+ return values;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ _.pairs = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [keys[i], obj[keys[i]]];
+ }
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ var keys = _.keys(obj);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ result[obj[keys[i]]] = keys[i];
+ }
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ var source, prop;
+ for (var i = 1, length = arguments.length; i < length; i++) {
+ source = arguments[i];
+ for (prop in source) {
+ obj[prop] = source[prop];
+ }
+ }
+ return obj;
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = function(obj, iteratee, context) {
+ var result = {}, key;
+ if (obj == null) return result;
+ if (_.isFunction(iteratee)) {
+ iteratee = optimizeCb(iteratee, context);
+ for (key in obj) {
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ } else {
+ var keys = flatten(arguments, false, false, 1);
+ obj = new Object(obj);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ key = keys[i];
+ if (key in obj) result[key] = obj[key];
+ }
+ }
+ return result;
+ };
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = function(obj, iteratee, context) {
+ if (_.isFunction(iteratee)) {
+ iteratee = _.negate(iteratee);
+ } else {
+ var keys = _.map(flatten(arguments, false, false, 1), String);
+ iteratee = function(value, key) {
+ return !_.contains(keys, key);
+ };
+ }
+ return _.pick(obj, iteratee, context);
+ };
+
+ // Fill in a given object with default properties.
+ _.defaults = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ for (var i = 1, length = arguments.length; i < length; i++) {
+ var source = arguments[i];
+ for (var prop in source) {
+ if (obj[prop] === void 0) obj[prop] = source[prop];
+ }
+ }
+ return obj;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
+ _.isFunction(bCtor) && bCtor instanceof bCtor)
+ && ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+ var size, result;
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ size = a.length;
+ result = size === b.length;
+ if (result) {
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (size--) {
+ if (!(result = eq(a[size], b[size], aStack, bStack))) break;
+ }
+ }
+ } else {
+ // Deep compare objects.
+ var keys = _.keys(a), key;
+ size = keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ result = _.keys(b).length === size;
+ if (result) {
+ while (size--) {
+ // Deep compare each member
+ key = keys[size];
+ if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;
+ }
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return result;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b, [], []);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0;
+ for (var key in obj) if (_.has(obj, key)) return false;
+ return true;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) === '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
+ _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE < 9), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return _.has(obj, 'callee');
+ };
+ }
+
+ // Optimize `isFunction` if appropriate. Work around an IE 11 bug.
+ if (typeof /./ !== 'function') {
+ _.isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && obj !== +obj;
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, key) {
+ return obj != null && hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iteratees.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Predicate-generating functions. Often useful outside of Underscore.
+ _.constant = function(value) {
+ return function() {
+ return value;
+ };
+ };
+
+ _.noop = function(){};
+
+ _.property = function(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+ };
+
+ // Returns a predicate for checking whether an object has a given set of `key:value` pairs.
+ _.matches = function(attrs) {
+ var pairs = _.pairs(attrs), length = pairs.length;
+ return function(obj) {
+ if (obj == null) return !length;
+ obj = new Object(obj);
+ for (var i = 0; i < length; i++) {
+ var pair = pairs[i], key = pair[0];
+ if (pair[1] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+ };
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // A (possibly faster) way to get the current timestamp as an integer.
+ _.now = Date.now || function() {
+ return new Date().getTime();
+ };
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '`': '`'
+ };
+ var unescapeMap = _.invert(escapeMap);
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ var createEscaper = function(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped
+ var source = '(?:' + _.keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ };
+ _.escape = createEscaper(escapeMap);
+ _.unescape = createEscaper(unescapeMap);
+
+ // If the value of the named `property` is a function then invoke it with the
+ // `object` as context; otherwise, return it.
+ _.result = function(object, property, fallback) {
+ var value = object == null ? void 0 : object[property];
+ if (value === void 0) {
+ return fallback;
+ }
+ return _.isFunction(value) ? object[property]() : value;
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate : /<%([\s\S]+?)%>/g,
+ interpolate : /<%=([\s\S]+?)%>/g,
+ escape : /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
+
+ var escapeChar = function(match) {
+ return '\\' + escapes[match];
+ };
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ // NB: `oldSettings` only exists for backwards compatibility.
+ _.template = function(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escaper, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offest.
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ try {
+ var render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ var argument = settings.variable || 'obj';
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function. Start chaining a wrapped Underscore object.
+ _.chain = function(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var result = function(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ _.each(_.functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return result(this, func.apply(_, args));
+ };
+ });
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return result(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ _.each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return result(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ // Extracts the result from a wrapped and chained object.
+ _.prototype.value = function() {
+ return this._wrapped;
+ };
+
+ // AMD registration happens at the end for compatibility with AMD loaders
+ // that may not enforce next-turn semantics on modules. Even though general
+ // practice for AMD registration is to be anonymous, underscore registers
+ // as a named module because, like jQuery, it is a base library that is
+ // popular enough to be bundled in a third party lib, but not be part of
+ // an AMD load request. Those cases could generate an error when an
+ // anonymous define() is called outside of a loader request.
+ if (typeof define === 'function' && define.amd) {
+ define('underscore', [], function() {
+ return _;
+ });
+ }
+}.call(this));
diff --git a/node_modules/js-beautify/tools/build.sh b/node_modules/js-beautify/tools/build.sh
new file mode 100755
index 0000000..523eabe
--- /dev/null
+++ b/node_modules/js-beautify/tools/build.sh
@@ -0,0 +1,140 @@
+#!/usr/bin/env bash
+
+REL_SCRIPT_DIR="`dirname \"$0\"`"
+SCRIPT_DIR="`( cd \"$REL_SCRIPT_DIR\" && pwd )`"
+PROJECT_DIR="`( cd \"$SCRIPT_DIR/..\" && pwd )`"
+
+build_help()
+{
+ echo "build.sh "
+ echo " full - build and test of all implementations"
+ echo " all - build of both implementations"
+ echo " js - build of javascript"
+ echo " py - build of python"
+ echo " alltest - test both implementations, js and python"
+ echo " pytest - test python implementation"
+ echo " jstest - test javascript implementation"
+}
+
+build_ci()
+{
+ build_full
+ build_git_status
+}
+
+build_full()
+{
+ build_all
+ build_alltest
+}
+
+build_all()
+{
+ build_py
+ build_js
+}
+
+build_py()
+{
+ echo Building python module...
+ pip install -e ./python || exit 1
+}
+
+build_js()
+{
+ echo Building javascript...
+ npm install || exit 1
+ generate_tests
+ # jshint
+ $PROJECT_DIR/node_modules/.bin/jshint 'js' 'test' || exit 1
+
+ # beautify test and data
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/test/amd-beautify-tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/test/node-beautify-html-perf-tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/test/node-beautify-perf-tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/test/node-beautify-tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/test/sanitytest.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/test/data/css/tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/test/data/html/tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/test/data/javascript/inputlib.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/test/data/javascript/tests.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/test/generate-tests.js || exit 1
+
+ # beautify product code
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/unpackers/javascriptobfuscator_unpacker.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/unpackers/myobfuscate_unpacker.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/unpackers/p_a_c_k_e_r_unpacker.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/unpackers/urlencode_unpacker.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/beautify-css.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/beautify-html.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/beautify.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/lib/cli.js || exit 1
+ $PROJECT_DIR/js/bin/js-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r $PROJECT_DIR/js/index.js || exit 1
+
+
+ # html not ready yet
+ # $PROJECT_DIR/js/bin/html-beautify.js --config $PROJECT_DIR/jsbeautifyrc -r index.html
+
+ # jshint again to make sure things haven't changed
+ $PROJECT_DIR/node_modules/.bin/jshint 'js' 'test' || exit 1
+}
+
+generate_tests()
+{
+ node test/generate-tests.js || exit 1
+}
+
+build_alltest()
+{
+ build_jstest
+ build_pytest
+}
+
+build_pytest()
+{
+ echo Testing python implementation...
+ generate_tests
+ cd python
+ python --version
+ ./jsbeautifier/tests/shell-smoke-test.sh || exit 1
+}
+
+build_jstest()
+{
+ echo Testing javascript implementation...
+ generate_tests
+ node --version
+ ./js/test/shell-smoke-test.sh || exit 1
+}
+
+build_git_status()
+{
+ $SCRIPT_DIR/git-status-clear.sh || exit 1
+}
+
+build_update-codemirror()
+{
+ rm -rf node_modules/codemirror
+ npm install codemirror
+ rm -rf ./web/third-party/codemirror/*
+ cp ./node_modules/codemirror/LICENSE ./web/third-party/codemirror/
+ cp ./node_modules/codemirror/README.md ./web/third-party/codemirror/
+ cp -r ./node_modules/codemirror/lib ./web/third-party/codemirror/
+ mkdir -p ./web/third-party/codemirror/mode
+ cp -r ./node_modules/codemirror/mode/javascript ./web/third-party/codemirror/mode/
+ git add -Av ./web/third-party/codemirror
+}
+
+main() {
+ cd $PROJECT_DIR
+ local ACTION
+ ACTION=build_${1:-full}
+ if [ -n "$(type -t $ACTION)" ] && [ "$(type -t $ACTION)" = "function" ]; then
+ $ACTION
+ else
+ build_help
+ fi
+
+}
+
+(main $*)
diff --git a/node_modules/js-beautify/tools/generate-changelog.sh b/node_modules/js-beautify/tools/generate-changelog.sh
new file mode 100755
index 0000000..bf1ca19
--- /dev/null
+++ b/node_modules/js-beautify/tools/generate-changelog.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+REL_SCRIPT_DIR="`dirname \"$0\"`"
+SCRIPT_DIR="`( cd \"$REL_SCRIPT_DIR\" && pwd )`"
+
+# based on https://gist.github.com/joelittlejohn/5937573
+#
+
+main()
+{
+ cd $SCRIPT_DIR/..
+
+ if [ "$#" -ne 1 ]; then
+ echo "Usage: ./generate-changelog.sh user/repo"
+ exit 1
+ fi
+
+ IFS=$'\n'
+ echo "# Changelog" > CHANGELOG.md
+
+ for m in $(curl -s "https://api.github.com/repos/$1/milestones?state=closed" | jq -c '.[] | [.title, .number, .description]' | gsort -r -V); do
+ mid=$(echo $m | sed 's/\[".*",\(.*\),".*"\]/\1/')
+ title=$(echo $m | sed 's/\["\(.*\)",.*,".*"\]/\1/')
+
+ echo "Processing milestone: $title..."
+ echo $m | sed 's/\["\(.*\)",.*\]/## \1/' >> CHANGELOG.md
+ echo "" >> CHANGELOG.md
+ echo '### Description' >> CHANGELOG.md
+ echo $m | sed 's/\[".*",.*,"\(.*\)"\]/\1/' | sed -e 's/\\"/"/g' | sed -e 's/\\r\\n/\\n/g' | sed -e 's/\\n/\'$'\n/g' >> CHANGELOG.md
+ echo "" >> CHANGELOG.md
+ echo '### Closed Issues' >> CHANGELOG.md
+ for i in $(curl -s "https://api.github.com/repos/$1/issues?milestone=$mid&state=closed" | jq -c '.[] | [.html_url, .number, .title]'); do
+ echo $i | sed 's/\["\(.*\)",\(.*\),\"\(.*\)\"\]/* \3 ([#\2](\1))/' | sed 's/\\"/"/g' >> CHANGELOG.md
+ done
+ echo "" >> CHANGELOG.md
+ echo "" >> CHANGELOG.md
+ done
+}
+
+(main $*)
diff --git a/node_modules/js-beautify/tools/git-status-clear.sh b/node_modules/js-beautify/tools/git-status-clear.sh
new file mode 100755
index 0000000..e231a95
--- /dev/null
+++ b/node_modules/js-beautify/tools/git-status-clear.sh
@@ -0,0 +1,18 @@
+echo "Post-build git status check..."
+echo "Ensuring no changes visible to git have been made to '$*' ..."
+
+git status $* | egrep -q 'nothing to commit.*working (directory|tree) clean' || {
+ # we should find nothing to commit. If we don't, build has failed.
+ echo "ERROR: Post-build git status check - FAILED."
+ echo "Git status reported changes to non-git-ignore'd files."
+ echo "TO REPRO: Run 'git status $*'. The use git gui or git diff to see what was changed during the build."
+ echo "TO FIX: Amend your commit and rebuild. Repeat until git status reports no changes both before and after the build."
+ echo "OUTPUT FOR 'git status $*':"
+ git status $*
+ echo "."
+ echo "OUTPUT FOR 'git diff $*':"
+ git diff $* | cat -t -e
+ exit 1
+}
+echo "Post-build git status check - Succeeded."
+exit 0
diff --git a/node_modules/js-beautify/tools/release-all.sh b/node_modules/js-beautify/tools/release-all.sh
new file mode 100755
index 0000000..dd255cc
--- /dev/null
+++ b/node_modules/js-beautify/tools/release-all.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+
+REL_SCRIPT_DIR="`dirname \"$0\"`"
+SCRIPT_DIR="`( cd \"$REL_SCRIPT_DIR\" && pwd )`"
+
+case "$OSTYPE" in
+ darwin*) PLATFORM="OSX" ;;
+ linux*) PLATFORM="LINUX" ;;
+ bsd*) PLATFORM="BSD" ;;
+ *) PLATFORM="UNKNOWN" ;;
+esac
+
+generate_changelog()
+{
+ $SCRIPT_DIR/generate-changelog.sh beautify-web/js-beautify || exit 1
+ git commit -am "Update Changelog for $NEW_VERSION"
+}
+
+release_python()
+{
+ git clean -xfd || exit 1
+ echo "__version__ = '$NEW_VERSION'" > python/jsbeautifier/__version__.py
+ git commit -am "Python $NEW_VERSION"
+ cd python
+ python setup.py register -r pypi
+ python setup.py sdist upload -r pypi
+ git push
+}
+
+release_node()
+{
+ git clean -xfd || exit 1
+ npm version $NEW_VERSION
+ npm publish .
+ git push
+ git push --tags
+}
+
+release_web()
+{
+ local ORIGINAL_BRANCH
+ ORIGINAL_BRANCH=$(git branch | grep '[*] .*' | awk '{print $2}')
+ git clean -xfd || exit 1
+ git fetch || exit 1
+ git checkout -B gh-pages origin/gh-pages || exit 1
+ git merge origin/master && git push || exit 1
+ git checkout $ORIGINAL_BRANCH
+}
+
+sedi() {
+ if [[ "$PLATFORM" == "OSX" || "$PLATFORM" == "BSD" ]]; then
+ sed -i "" $@
+ elif [ "$PLATFORM" == "LINUX" ]; then
+ sed -i $@
+ else
+ exit 1
+ fi
+}
+
+update_readme_versions()
+{
+ git clean -xfd || exit 1
+ sedi -E 's@(cdn.rawgit.+beautify/v)[^/]+@\1'$NEW_VERSION'@' README.md
+ sedi -E 's@(cdnjs.cloudflare.+beautify/)[^/]+@\1'$NEW_VERSION'@' README.md
+ sedi -E 's/\((README\.md:.js-beautify@).+\)/(\1'$NEW_VERSION')/' README.md
+ git add README.md
+ git commit -m "Bump version numbers in README.md"
+}
+
+main()
+{
+ cd $SCRIPT_DIR/..
+
+ local NEW_VERSION=$1
+ NEW_VERSION=$1
+
+ git checkout master
+
+ generate_changelog
+ update_readme_versions
+ (release_python)
+ release_node
+ release_web
+}
+
+(main $*)
diff --git a/node_modules/jsonfile/.npmignore b/node_modules/jsonfile/.npmignore
new file mode 100644
index 0000000..cefaa67
--- /dev/null
+++ b/node_modules/jsonfile/.npmignore
@@ -0,0 +1,2 @@
+test/
+.travis.yml
\ No newline at end of file
diff --git a/node_modules/jsonfile/CHANGELOG.md b/node_modules/jsonfile/CHANGELOG.md
new file mode 100644
index 0000000..66fcbb4
--- /dev/null
+++ b/node_modules/jsonfile/CHANGELOG.md
@@ -0,0 +1,126 @@
+2.4.0 / 2016-09-15
+------------------
+### Changed
+- added optional support for `graceful-fs` [#62]
+
+2.3.1 / 2016-05-13
+------------------
+- fix to support BOM. [#45][#45]
+
+2.3.0 / 2016-04-16
+------------------
+- add `throws` to `readFile()`. See [#39][#39]
+- add support for any arbitrary `fs` module. Useful with [mock-fs](https://www.npmjs.com/package/mock-fs)
+
+2.2.3 / 2015-10-14
+------------------
+- include file name in parse error. See: https://github.com/jprichardson/node-jsonfile/pull/34
+
+2.2.2 / 2015-09-16
+------------------
+- split out tests into separate files
+- fixed `throws` when set to `true` in `readFileSync()`. See: https://github.com/jprichardson/node-jsonfile/pull/33
+
+2.2.1 / 2015-06-25
+------------------
+- fixed regression when passing in string as encoding for options in `writeFile()` and `writeFileSync()`. See: https://github.com/jprichardson/node-jsonfile/issues/28
+
+2.2.0 / 2015-06-25
+------------------
+- added `options.spaces` to `writeFile()` and `writeFileSync()`
+
+2.1.2 / 2015-06-22
+------------------
+- fixed if passed `readFileSync(file, 'utf8')`. See: https://github.com/jprichardson/node-jsonfile/issues/25
+
+2.1.1 / 2015-06-19
+------------------
+- fixed regressions if `null` is passed for options. See: https://github.com/jprichardson/node-jsonfile/issues/24
+
+2.1.0 / 2015-06-19
+------------------
+- cleanup: JavaScript Standard Style, rename files, dropped terst for assert
+- methods now support JSON revivers/replacers
+
+2.0.1 / 2015-05-24
+------------------
+- update license attribute https://github.com/jprichardson/node-jsonfile/pull/21
+
+2.0.0 / 2014-07-28
+------------------
+* added `\n` to end of file on write. [#14](https://github.com/jprichardson/node-jsonfile/pull/14)
+* added `options.throws` to `readFileSync()`
+* dropped support for Node v0.8
+
+1.2.0 / 2014-06-29
+------------------
+* removed semicolons
+* bugfix: passed `options` to `fs.readFile` and `fs.readFileSync`. This technically changes behavior, but
+changes it according to docs. [#12][#12]
+
+1.1.1 / 2013-11-11
+------------------
+* fixed catching of callback bug (ffissore / #5)
+
+1.1.0 / 2013-10-11
+------------------
+* added `options` param to methods, (seanodell / #4)
+
+1.0.1 / 2013-09-05
+------------------
+* removed `homepage` field from package.json to remove NPM warning
+
+1.0.0 / 2013-06-28
+------------------
+* added `.npmignore`, #1
+* changed spacing default from `4` to `2` to follow Node conventions
+
+0.0.1 / 2012-09-10
+------------------
+* Initial release.
+
+[#45]: https://github.com/jprichardson/node-jsonfile/issues/45 "Reading of UTF8-encoded (w/ BOM) files fails"
+[#44]: https://github.com/jprichardson/node-jsonfile/issues/44 "Extra characters in written file"
+[#43]: https://github.com/jprichardson/node-jsonfile/issues/43 "Prettyfy json when written to file"
+[#42]: https://github.com/jprichardson/node-jsonfile/pull/42 "Moved fs.readFileSync within the try/catch"
+[#41]: https://github.com/jprichardson/node-jsonfile/issues/41 "Linux: Hidden file not working"
+[#40]: https://github.com/jprichardson/node-jsonfile/issues/40 "autocreate folder doesnt work from Path-value"
+[#39]: https://github.com/jprichardson/node-jsonfile/pull/39 "Add `throws` option for readFile (async)"
+[#38]: https://github.com/jprichardson/node-jsonfile/pull/38 "Update README.md writeFile[Sync] signature"
+[#37]: https://github.com/jprichardson/node-jsonfile/pull/37 "support append file"
+[#36]: https://github.com/jprichardson/node-jsonfile/pull/36 "Add typescript definition file."
+[#35]: https://github.com/jprichardson/node-jsonfile/pull/35 "Add typescript definition file."
+[#34]: https://github.com/jprichardson/node-jsonfile/pull/34 "readFile JSON parse error includes filename"
+[#33]: https://github.com/jprichardson/node-jsonfile/pull/33 "fix throw->throws typo in readFileSync()"
+[#32]: https://github.com/jprichardson/node-jsonfile/issues/32 "readFile & readFileSync can possible have strip-comments as an option?"
+[#31]: https://github.com/jprichardson/node-jsonfile/pull/31 "[Modify] Support string include is unicode escape string"
+[#30]: https://github.com/jprichardson/node-jsonfile/issues/30 "How to use Jsonfile package in Meteor.js App?"
+[#29]: https://github.com/jprichardson/node-jsonfile/issues/29 "writefile callback if no error?"
+[#28]: https://github.com/jprichardson/node-jsonfile/issues/28 "writeFile options argument broken "
+[#27]: https://github.com/jprichardson/node-jsonfile/pull/27 "Use svg instead of png to get better image quality"
+[#26]: https://github.com/jprichardson/node-jsonfile/issues/26 "Breaking change to fs-extra"
+[#25]: https://github.com/jprichardson/node-jsonfile/issues/25 "support string encoding param for read methods"
+[#24]: https://github.com/jprichardson/node-jsonfile/issues/24 "readFile: Passing in null options with a callback throws an error"
+[#23]: https://github.com/jprichardson/node-jsonfile/pull/23 "Add appendFile and appendFileSync"
+[#22]: https://github.com/jprichardson/node-jsonfile/issues/22 "Default value for spaces in readme.md is outdated"
+[#21]: https://github.com/jprichardson/node-jsonfile/pull/21 "Update license attribute"
+[#20]: https://github.com/jprichardson/node-jsonfile/issues/20 "Add simple caching functionallity"
+[#19]: https://github.com/jprichardson/node-jsonfile/pull/19 "Add appendFileSync method"
+[#18]: https://github.com/jprichardson/node-jsonfile/issues/18 "Add updateFile and updateFileSync methods"
+[#17]: https://github.com/jprichardson/node-jsonfile/issues/17 "seem read & write sync has sequentially problem"
+[#16]: https://github.com/jprichardson/node-jsonfile/pull/16 "export spaces defaulted to null"
+[#15]: https://github.com/jprichardson/node-jsonfile/issues/15 "`jsonfile.spaces` should default to `null`"
+[#14]: https://github.com/jprichardson/node-jsonfile/pull/14 "Add EOL at EOF"
+[#13]: https://github.com/jprichardson/node-jsonfile/issues/13 "Add a final newline"
+[#12]: https://github.com/jprichardson/node-jsonfile/issues/12 "readFile doesn't accept options"
+[#11]: https://github.com/jprichardson/node-jsonfile/pull/11 "Added try,catch to readFileSync"
+[#10]: https://github.com/jprichardson/node-jsonfile/issues/10 "No output or error from writeFile"
+[#9]: https://github.com/jprichardson/node-jsonfile/pull/9 "Change 'js' to 'jf' in example."
+[#8]: https://github.com/jprichardson/node-jsonfile/pull/8 "Updated forgotten module.exports to me."
+[#7]: https://github.com/jprichardson/node-jsonfile/pull/7 "Add file name in error message"
+[#6]: https://github.com/jprichardson/node-jsonfile/pull/6 "Use graceful-fs when possible"
+[#5]: https://github.com/jprichardson/node-jsonfile/pull/5 "Jsonfile doesn't behave nicely when used inside a test suite."
+[#4]: https://github.com/jprichardson/node-jsonfile/pull/4 "Added options parameter to writeFile and writeFileSync"
+[#3]: https://github.com/jprichardson/node-jsonfile/issues/3 "test2"
+[#2]: https://github.com/jprichardson/node-jsonfile/issues/2 "homepage field must be a string url. Deleted."
+[#1]: https://github.com/jprichardson/node-jsonfile/pull/1 "adding an `.npmignore` file"
diff --git a/node_modules/jsonfile/LICENSE b/node_modules/jsonfile/LICENSE
new file mode 100644
index 0000000..cb7e807
--- /dev/null
+++ b/node_modules/jsonfile/LICENSE
@@ -0,0 +1,15 @@
+(The MIT License)
+
+Copyright (c) 2012-2015, JP Richardson
+
+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/node_modules/jsonfile/README.md b/node_modules/jsonfile/README.md
new file mode 100644
index 0000000..54bca05
--- /dev/null
+++ b/node_modules/jsonfile/README.md
@@ -0,0 +1,162 @@
+Node.js - jsonfile
+================
+
+Easily read/write JSON files.
+
+[](https://www.npmjs.org/package/jsonfile)
+[](http://travis-ci.org/jprichardson/node-jsonfile)
+[](https://ci.appveyor.com/project/jprichardson/node-jsonfile/branch/master)
+
+
+
+Why?
+----
+
+Writing `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying.
+
+
+
+Installation
+------------
+
+ npm install --save jsonfile
+
+
+
+API
+---
+
+### readFile(filename, [options], callback)
+
+`options` (`object`, default `undefined`): Pass in any `fs.readFile` options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).
+ - `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, pass this error to the callback.
+ If `false`, returns `null` for the object.
+
+
+```js
+var jsonfile = require('jsonfile')
+var file = '/tmp/data.json'
+jsonfile.readFile(file, function(err, obj) {
+ console.dir(obj)
+})
+```
+
+
+### readFileSync(filename, [options])
+
+`options` (`object`, default `undefined`): Pass in any `fs.readFileSync` options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).
+- `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, throw the error.
+If `false`, returns `null` for the object.
+
+```js
+var jsonfile = require('jsonfile')
+var file = '/tmp/data.json'
+
+console.dir(jsonfile.readFileSync(file))
+```
+
+
+### writeFile(filename, obj, [options], callback)
+
+`options`: Pass in any `fs.writeFile` options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`.
+
+
+```js
+var jsonfile = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jsonfile.writeFile(file, obj, function (err) {
+ console.error(err)
+})
+```
+
+**formatting with spaces:**
+
+```js
+var jsonfile = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jsonfile.writeFile(file, obj, {spaces: 2}, function(err) {
+ console.error(err)
+})
+```
+
+
+### writeFileSync(filename, obj, [options])
+
+`options`: Pass in any `fs.writeFileSync` options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`.
+
+```js
+var jsonfile = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jsonfile.writeFileSync(file, obj)
+```
+
+**formatting with spaces:**
+
+```js
+var jsonfile = require('jsonfile')
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+jsonfile.writeFileSync(file, obj, {spaces: 2})
+```
+
+
+
+### spaces
+
+Global configuration to set spaces to indent JSON files.
+
+**default:** `null`
+
+```js
+var jsonfile = require('jsonfile')
+
+jsonfile.spaces = 4
+
+var file = '/tmp/data.json'
+var obj = {name: 'JP'}
+
+// json file has four space indenting now
+jsonfile.writeFile(file, obj, function (err) {
+ console.error(err)
+})
+```
+
+Note, it's bound to `this.spaces`. So, if you do this:
+
+```js
+var myObj = {}
+myObj.writeJsonSync = jsonfile.writeFileSync
+// => this.spaces = null
+```
+
+Could do the following:
+
+```js
+var jsonfile = require('jsonfile')
+jsonfile.spaces = 4
+jsonfile.writeFileSync(file, obj) // will have 4 spaces indentation
+
+var myCrazyObj = {spaces: 32}
+myCrazyObj.writeJsonSync = jsonfile.writeFileSync
+myCrazyObj.writeJsonSync(file, obj) // will have 32 space indentation
+myCrazyObj.writeJsonSync(file, obj, {spaces: 2}) // will have only 2
+```
+
+
+License
+-------
+
+(MIT License)
+
+Copyright 2012-2016, JP Richardson
diff --git a/node_modules/jsonfile/appveyor.yml b/node_modules/jsonfile/appveyor.yml
new file mode 100644
index 0000000..872af18
--- /dev/null
+++ b/node_modules/jsonfile/appveyor.yml
@@ -0,0 +1,28 @@
+# Test against this version of Node.js
+environment:
+ matrix:
+ # node.js
+ - nodejs_version: "0.10"
+ - nodejs_version: "0.12"
+ - nodejs_version: "4"
+ - nodejs_version: "5"
+ - nodejs_version: "6"
+
+# Install scripts. (runs after repo cloning)
+install:
+ # Get the latest stable version of Node.js or io.js
+ - ps: Install-Product node $env:nodejs_version
+ # install modules
+ - npm config set loglevel warn
+ - npm install --silent
+
+# Post-install test scripts.
+test_script:
+ # Output useful info for debugging.
+ - node --version
+ - npm --version
+ # run tests
+ - npm test
+
+# Don't actually build.
+build: off
diff --git a/node_modules/jsonfile/index.js b/node_modules/jsonfile/index.js
new file mode 100644
index 0000000..7111e15
--- /dev/null
+++ b/node_modules/jsonfile/index.js
@@ -0,0 +1,133 @@
+var _fs
+try {
+ _fs = require('graceful-fs')
+} catch (_) {
+ _fs = require('fs')
+}
+
+function readFile (file, options, callback) {
+ if (callback == null) {
+ callback = options
+ options = {}
+ }
+
+ if (typeof options === 'string') {
+ options = {encoding: options}
+ }
+
+ options = options || {}
+ var fs = options.fs || _fs
+
+ var shouldThrow = true
+ // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead
+ if ('passParsingErrors' in options) {
+ shouldThrow = options.passParsingErrors
+ } else if ('throws' in options) {
+ shouldThrow = options.throws
+ }
+
+ fs.readFile(file, options, function (err, data) {
+ if (err) return callback(err)
+
+ data = stripBom(data)
+
+ var obj
+ try {
+ obj = JSON.parse(data, options ? options.reviver : null)
+ } catch (err2) {
+ if (shouldThrow) {
+ err2.message = file + ': ' + err2.message
+ return callback(err2)
+ } else {
+ return callback(null, null)
+ }
+ }
+
+ callback(null, obj)
+ })
+}
+
+function readFileSync (file, options) {
+ options = options || {}
+ if (typeof options === 'string') {
+ options = {encoding: options}
+ }
+
+ var fs = options.fs || _fs
+
+ var shouldThrow = true
+ // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead
+ if ('passParsingErrors' in options) {
+ shouldThrow = options.passParsingErrors
+ } else if ('throws' in options) {
+ shouldThrow = options.throws
+ }
+
+ var content = fs.readFileSync(file, options)
+ content = stripBom(content)
+
+ try {
+ return JSON.parse(content, options.reviver)
+ } catch (err) {
+ if (shouldThrow) {
+ err.message = file + ': ' + err.message
+ throw err
+ } else {
+ return null
+ }
+ }
+}
+
+function writeFile (file, obj, options, callback) {
+ if (callback == null) {
+ callback = options
+ options = {}
+ }
+ options = options || {}
+ var fs = options.fs || _fs
+
+ var spaces = typeof options === 'object' && options !== null
+ ? 'spaces' in options
+ ? options.spaces : this.spaces
+ : this.spaces
+
+ var str = ''
+ try {
+ str = JSON.stringify(obj, options ? options.replacer : null, spaces) + '\n'
+ } catch (err) {
+ if (callback) return callback(err, null)
+ }
+
+ fs.writeFile(file, str, options, callback)
+}
+
+function writeFileSync (file, obj, options) {
+ options = options || {}
+ var fs = options.fs || _fs
+
+ var spaces = typeof options === 'object' && options !== null
+ ? 'spaces' in options
+ ? options.spaces : this.spaces
+ : this.spaces
+
+ var str = JSON.stringify(obj, options.replacer, spaces) + '\n'
+ // not sure if fs.writeFileSync returns anything, but just in case
+ return fs.writeFileSync(file, str, options)
+}
+
+function stripBom (content) {
+ // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
+ if (Buffer.isBuffer(content)) content = content.toString('utf8')
+ content = content.replace(/^\uFEFF/, '')
+ return content
+}
+
+var jsonfile = {
+ spaces: null,
+ readFile: readFile,
+ readFileSync: readFileSync,
+ writeFile: writeFile,
+ writeFileSync: writeFileSync
+}
+
+module.exports = jsonfile
diff --git a/node_modules/jsonfile/package.json b/node_modules/jsonfile/package.json
new file mode 100644
index 0000000..e3b70ce
--- /dev/null
+++ b/node_modules/jsonfile/package.json
@@ -0,0 +1,103 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "jsonfile@^2.1.0",
+ "scope": null,
+ "escapedName": "jsonfile",
+ "name": "jsonfile",
+ "rawSpec": "^2.1.0",
+ "spec": ">=2.1.0 <3.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fs-extra"
+ ]
+ ],
+ "_from": "jsonfile@>=2.1.0 <3.0.0",
+ "_id": "jsonfile@2.4.0",
+ "_inCache": true,
+ "_location": "/jsonfile",
+ "_nodeVersion": "6.1.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/jsonfile-2.4.0.tgz_1473989978270_0.6271681792568415"
+ },
+ "_npmUser": {
+ "name": "jprichardson",
+ "email": "jprichardson@gmail.com"
+ },
+ "_npmVersion": "3.8.6",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "jsonfile@^2.1.0",
+ "scope": null,
+ "escapedName": "jsonfile",
+ "name": "jsonfile",
+ "rawSpec": "^2.1.0",
+ "spec": ">=2.1.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fs-extra"
+ ],
+ "_resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "_shasum": "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8",
+ "_shrinkwrap": null,
+ "_spec": "jsonfile@^2.1.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fs-extra",
+ "author": {
+ "name": "JP Richardson",
+ "email": "jprichardson@gmail.com"
+ },
+ "bugs": {
+ "url": "https://github.com/jprichardson/node-jsonfile/issues"
+ },
+ "dependencies": {
+ "graceful-fs": "^4.1.6"
+ },
+ "description": "Easily read/write JSON files.",
+ "devDependencies": {
+ "mocha": "2.x",
+ "mock-fs": "^3.8.0",
+ "rimraf": "^2.4.0",
+ "standard": "^6.0.8"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "3736a2b428b87bbda0cc83b53fa3d633a35c2ae8",
+ "tarball": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz"
+ },
+ "gitHead": "00b3983ac4aade79c64c7a8c2ced257078625c6d",
+ "homepage": "https://github.com/jprichardson/node-jsonfile#readme",
+ "keywords": [
+ "read",
+ "write",
+ "file",
+ "json",
+ "fs",
+ "fs-extra"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jprichardson",
+ "email": "jprichardson@gmail.com"
+ }
+ ],
+ "name": "jsonfile",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ },
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/jprichardson/node-jsonfile.git"
+ },
+ "scripts": {
+ "lint": "standard",
+ "test": "npm run lint && npm run unit",
+ "unit": "mocha"
+ },
+ "version": "2.4.0"
+}
diff --git a/node_modules/jstransformer/LICENSE b/node_modules/jstransformer/LICENSE
new file mode 100644
index 0000000..27cc9f3
--- /dev/null
+++ b/node_modules/jstransformer/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014 Forbes Lindesay
+
+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/node_modules/jstransformer/README.md b/node_modules/jstransformer/README.md
new file mode 100644
index 0000000..f294e79
--- /dev/null
+++ b/node_modules/jstransformer/README.md
@@ -0,0 +1,103 @@
+
+JSTransformer
+Normalize the API of any jstransformer
+
+
+
+
+
+
+## Installation
+
+ npm install jstransformer
+
+## Usage
+
+```js
+var transformer = require('jstransformer');
+var marked = transformer(require('jstransformer-marked'));
+
+var options = {};
+var res = marked.render('Some **markdown**', options);
+// => {body: 'Some markdown ', dependencies: []}
+```
+
+This gives the same API regardless of the jstransformer passed in.
+
+## API
+
+A transformer, once normalised using this module, will implement the following methods. Note that if the underlying transformer cannot be used to implement the functionality, it may ultimately just throw an error.
+
+### Returned object from `.render*`
+
+```js
+{body: String, dependencies: Array.}
+```
+
+ - `body` represents the result as a string
+ - `dependencies` is an array of files that were read in as part of the render process (or an empty array if there were no dependencies)
+
+### `.render`
+
+```js
+transformer.render(str, options, locals);
+=> {body: String, dependencies: Array.}
+```
+
+_requires the underlying transform to implement `.render` or `.compile`_
+
+Transform a string and return an object.
+
+### `.renderAsync`
+
+```js
+transformer.renderAsync(str[, options], locals, callback);
+```
+
+```js
+transformer.renderAsync(str[, options], locals);
+=> Promise({body: String, dependencies: Array.})
+```
+
+_requires the underlying transform to implement `.renderAsync` or `.render`_
+
+Transform a string asynchronously. If a callback is provided, it is called as `callback(err, data)`, otherwise a Promise is returned.
+
+### `.renderFile`
+
+```js
+transformer.renderFile(filename, options, locals)
+=> {body: String, dependencies: Array.}
+```
+
+_requires the underlying transform to implement `.renderFile`, `.render`, `.compileFile`, or `.compile`_
+
+Transform a file and return an object.
+
+### `.renderFileAsync`
+
+```js
+transformer.renderFileAsync(filename[, options], locals, callback);
+```
+
+```js
+transformer.renderFileAsync(filename[, options], locals);
+=> Promise({body: String, dependencies: Array.})
+```
+
+_requires the underlying transform to implement `.renderFileAsync`, `.renderFile`, `.renderAsync`, `.render`, `.compileFileAsync`, `.compileFile`, `.compileAsync`, or `.compileFile`_
+
+Transform a file asynchronously. If a callback is provided, it is called as `callback(err, data)`, otherwise a Promise is returned.
+
+### `.inputFormats`
+
+```js
+var formats = transformer.inputFormats;
+=> ['md', 'markdown']
+```
+
+Returns an array of strings representing potential input formats for the transform. If not provided directly by the transform, results in an array containing the name of the transform.
+
+## License
+
+MIT
diff --git a/node_modules/jstransformer/index.js b/node_modules/jstransformer/index.js
new file mode 100644
index 0000000..ba00b9c
--- /dev/null
+++ b/node_modules/jstransformer/index.js
@@ -0,0 +1,328 @@
+'use strict';
+
+var fs = require('fs');
+var assert = require('assert');
+var Promise = require('promise');
+var isPromise = require('is-promise');
+
+var tr = (module.exports = function (transformer) {
+ return new Transformer(transformer);
+});
+tr.Transformer = Transformer;
+tr.normalizeFn = normalizeFn;
+tr.normalizeFnAsync = normalizeFnAsync;
+tr.normalize = normalize;
+tr.normalizeAsync = normalizeAsync;
+tr.readFile = Promise.denodeify(fs.readFile);
+tr.readFileSync = fs.readFileSync;
+
+function normalizeFn(result) {
+ if (typeof result === 'function') {
+ return {fn: result, dependencies: []};
+ } else if (result && typeof result === 'object' && typeof result.fn === 'function') {
+ if ('dependencies' in result) {
+ if (!Array.isArray(result.dependencies)) {
+ throw new Error('Result should have a dependencies property that is an array');
+ }
+ } else {
+ result.dependencies = [];
+ }
+ return result;
+ } else {
+ throw new Error('Invalid result object from transform.');
+ }
+}
+function normalizeFnAsync(result, cb) {
+ return Promise.resolve(result).then(function (result) {
+ if (result && isPromise(result.fn)) {
+ return result.fn.then(function (fn) {
+ result.fn = fn;
+ return result;
+ });
+ }
+ return result;
+ }).then(tr.normalizeFn).nodeify(cb);
+}
+function normalize(result) {
+ if (typeof result === 'string') {
+ return {body: result, dependencies: []};
+ } else if (result && typeof result === 'object' && typeof result.body === 'string') {
+ if ('dependencies' in result) {
+ if (!Array.isArray(result.dependencies)) {
+ throw new Error('Result should have a dependencies property that is an array');
+ }
+ } else {
+ result.dependencies = [];
+ }
+ return result;
+ } else {
+ throw new Error('Invalid result object from transform.');
+ }
+}
+function normalizeAsync(result, cb) {
+ return Promise.resolve(result).then(function (result) {
+ if (result && isPromise(result.body)) {
+ return result.body.then(function (body) {
+ result.body = body;
+ return result;
+ });
+ }
+ return result;
+ }).then(tr.normalize).nodeify(cb);
+}
+
+function Transformer(tr) {
+ assert(tr, 'Transformer must be an object');
+ assert(typeof tr.name === 'string', 'Transformer must have a name');
+ assert(typeof tr.outputFormat === 'string', 'Transformer must have an output format');
+ assert([
+ 'compile',
+ 'compileAsync',
+ 'compileFile',
+ 'compileFileAsync',
+ 'compileClient',
+ 'compileClientAsync',
+ 'compileFileClient',
+ 'compileFileClientAsync',
+ 'render',
+ 'renderAsync',
+ 'renderFile',
+ 'renderFileAsync'
+ ].some(function (method) {
+ return typeof tr[method] === 'function';
+ }), 'Transformer must implement at least one of the potential methods.');
+ this._tr = tr;
+ this.name = this._tr.name;
+ this.outputFormat = this._tr.outputFormat;
+ this.inputFormats = this._tr.inputFormats || [this.name];
+}
+
+var fallbacks = {
+ compile: ['compile'],
+ compileAsync: ['compileAsync', 'compile'],
+ compileFile: ['compileFile', 'compile'],
+ compileFileAsync: ['compileFileAsync', 'compileFile', 'compileAsync', 'compile'],
+ compileClient: ['compileClient'],
+ compileClientAsync: ['compileClientAsync', 'compileClient'],
+ compileFileClient: ['compileFileClient', 'compileClient'],
+ compileFileClientAsync: [
+ 'compileFileClientAsync', 'compileFileClient', 'compileClientAsync', 'compileClient'
+ ],
+ render: ['render', 'compile'],
+ renderAsync: ['renderAsync', 'render', 'compileAsync', 'compile'],
+ renderFile: ['renderFile', 'render', 'compileFile', 'compile'],
+ renderFileAsync: [
+ 'renderFileAsync', 'renderFile', 'renderAsync', 'render',
+ 'compileFileAsync', 'compileFile', 'compileAsync', 'compile'
+ ]
+};
+
+Transformer.prototype._hasMethod = function (method) {
+ return typeof this._tr[method] === 'function';
+};
+Transformer.prototype.can = function (method) {
+ return fallbacks[method].some(function (method) {
+ return this._hasMethod(method);
+ }.bind(this));
+};
+
+/* COMPILE */
+
+Transformer.prototype.compile = function (str, options) {
+ if (!this.can('compile')) {
+ if (this.can('compileAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support synchronous compilation');
+ } else if (this.can('compileFileAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support compiling plain strings');
+ } else {
+ throw new Error('The Transform "' + this.name + '" does not support compilation');
+ }
+ }
+ return tr.normalizeFn(this._tr.compile(str, options));
+};
+Transformer.prototype.compileAsync = function (str, options, cb) {
+ if (!this.can('compileAsync')) {
+ if (this.can('compileFileAsync')) {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compiling plain strings')).nodeify(cb);
+ } else {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compilation')).nodeify(cb);
+ }
+ }
+ if (this._hasMethod('compileAsync')) {
+ return tr.normalizeFnAsync(this._tr.compileAsync(str, options), cb);
+ } else {
+ return tr.normalizeFnAsync(this._tr.compile(str, options), cb);
+ }
+};
+Transformer.prototype.compileFile = function (filename, options) {
+ if (!this.can('compileFile')) {
+ if (this.can('compileFileAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support synchronous compilation');
+ } else {
+ throw new Error('The Transform "' + this.name + '" does not support compilation');
+ }
+ }
+ if (this._hasMethod('compileFile')) {
+ return tr.normalizeFn(this._tr.compileFile(filename, options));
+ } else {
+ return tr.normalizeFn(this._tr.compile(tr.readFileSync(filename, 'utf8'), options));
+ }
+};
+Transformer.prototype.compileFileAsync = function (filename, options, cb) {
+ if (!this.can('compileFileAsync')) {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compilation'));
+ }
+ if (this._hasMethod('compileFileAsync')) {
+ return tr.normalizeFnAsync(this._tr.compileFileAsync(filename, options), cb);
+ } else if (this._hasMethod('compileFile')) {
+ return tr.normalizeFnAsync(this._tr.compileFile(filename, options), cb);
+ } else {
+ return tr.normalizeFnAsync(tr.readFile(filename, 'utf8').then(function (str) {
+ if (this._hasMethod('compileAsync')) {
+ return this._tr.compileAsync(str, options);
+ } else {
+ return this._tr.compile(str, options);
+ }
+ }.bind(this)), cb);
+ }
+};
+
+/* COMPILE CLIENT */
+
+
+Transformer.prototype.compileClient = function (str, options) {
+ if (!this.can('compileClient')) {
+ if (this.can('compileClientAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support compiling for the client synchronously.');
+ } else if (this.can('compileFileClientAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support compiling for the client from a string.');
+ } else {
+ throw new Error('The Transform "' + this.name + '" does not support compiling for the client');
+ }
+ }
+ return tr.normalize(this._tr.compileClient(str, options));
+};
+Transformer.prototype.compileClientAsync = function (str, options, cb) {
+ if (!this.can('compileClientAsync')) {
+ if (this.can('compileFileClientAsync')) {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compiling for the client from a string.')).nodeify(cb);
+ } else {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compiling for the client')).nodeify(cb);
+ }
+ }
+ if (this._hasMethod('compileClientAsync')) {
+ return tr.normalizeAsync(this._tr.compileClientAsync(str, options), cb);
+ } else {
+ return tr.normalizeAsync(this._tr.compileClient(str, options), cb);
+ }
+};
+Transformer.prototype.compileFileClient = function (filename, options) {
+ if (!this.can('compileFileClient')) {
+ if (this.can('compileFileClientAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support compiling for the client synchronously.');
+ } else {
+ throw new Error('The Transform "' + this.name + '" does not support compiling for the client');
+ }
+ }
+ if (this._hasMethod('compileFileClient')) {
+ return tr.normalize(this._tr.compileFileClient(filename, options));
+ } else {
+ return tr.normalize(this._tr.compileClient(tr.readFileSync(filename, 'utf8'), options));
+ }
+};
+Transformer.prototype.compileFileClientAsync = function (filename, options, cb) {
+ if (!this.can('compileFileClientAsync')) {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support compiling for the client')).nodeify(cb)
+ }
+ if (this._hasMethod('compileFileClientAsync')) {
+ return tr.normalizeAsync(this._tr.compileFileClientAsync(filename, options), cb);
+ } else if (this._hasMethod('compileFileClient')) {
+ return tr.normalizeAsync(this._tr.compileFileClient(filename, options), cb);
+ } else {
+ return tr.normalizeAsync(tr.readFile(filename, 'utf8').then(function (str) {
+ if (this._hasMethod('compileClientAsync')) {
+ return this._tr.compileClientAsync(str, options);
+ } else {
+ return this._tr.compileClient(str, options);
+ }
+ }.bind(this)), cb);
+ }
+};
+
+/* RENDER */
+
+Transformer.prototype.render = function (str, options, locals) {
+ if (!this.can('render')) {
+ if (this.can('renderAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support rendering synchronously.');
+ } else if (this.can('renderFileAsync')) {
+ throw new Error('The Transform "' + this.name + '" does not support rendering from a string.');
+ } else {
+ throw new Error('The Transform "' + this.name + '" does not support rendering');
+ }
+ }
+ if (this._hasMethod('render')) {
+ return tr.normalize(this._tr.render(str, options, locals));
+ } else {
+ var compiled = tr.normalizeFn(this._tr.compile(str, options));
+ var body = compiled.fn(options || locals);
+ if (typeof body !== 'string') {
+ throw new Error('The Transform "' + this.name + '" does not support rendering synchronously.');
+ }
+ return tr.normalize({body: body, dependencies: compiled.dependencies});
+ }
+};
+Transformer.prototype.renderAsync = function (str, options, locals, cb) {
+ if (typeof locals === 'function') {
+ cb = locals;
+ locals = options;
+ }
+ if (!this.can('renderAsync')) {
+ if (this.can('renderFileAsync')) {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support rendering from a string.')).nodeify(cb);
+ } else {
+ return Promise.reject(new Error('The Transform "' + this.name + '" does not support rendering')).nodeify(cb);
+ }
+ }
+ if (this._hasMethod('renderAsync')) {
+ return tr.normalizeAsync(this._tr.renderAsync(str, options, locals), cb);
+ } else if (this._hasMethod('render')) {
+ return tr.normalizeAsync(this._tr.render(str, options, locals), cb);
+ } else {
+ return tr.normalizeAsync(this.compileAsync(str, options).then(function (compiled) {
+ return {body: compiled.fn(options || locals), dependencies: compiled.dependencies};
+ }), cb);
+ }
+};
+Transformer.prototype.renderFile = function (filename, options, locals) {
+ if (typeof this._tr.renderFile === 'function') {
+ return tr.normalize(this._tr.renderFile(filename, options, locals));
+ } else if (typeof this._tr.render === 'function') {
+ return tr.normalize(this._tr.render(tr.readFileSync(filename, 'utf8'), options, locals));
+ } else if (this._hasMethod('compile') || this._hasMethod('compileFile')) {
+ var compiled = this.compileFile(filename, options);
+ return tr.normalize({body: compiled.fn(options || locals), dependencies: compiled.dependencies});
+ } else {
+ return Promise.reject(new Error('This transform does not support synchronous rendering'));
+ }
+};
+Transformer.prototype.renderFileAsync = function (filename, options, locals, cb) {
+ if (typeof locals === 'function') {
+ cb = locals;
+ locals = options;
+ }
+ if (typeof this._tr.renderFileAsync === 'function') {
+ return tr.normalizeAsync(this._tr.renderFileAsync(filename, options, locals), cb);
+ } else if (typeof this._tr.renderFile === 'function') {
+ return tr.normalizeAsync(this._tr.renderFile(filename, options, locals), cb);
+ } else if (this._hasMethod('compile') || this._hasMethod('compileAsync')
+ || this._hasMethod('compileFile') || this._hasMethod('compileFileAsync')) {
+ return tr.normalizeAsync(this.compileFileAsync(filename, options).then(function (compiled) {
+ return {body: compiled.fn(options || locals), dependencies: compiled.dependencies};
+ }), cb);
+ } else {
+ return tr.normalizeAsync(tr.readFile(filename, 'utf8').then(function (str) {
+ return this.renderAsync(str, options, locals);
+ }.bind(this)), cb);
+ }
+};
diff --git a/node_modules/jstransformer/package.json b/node_modules/jstransformer/package.json
new file mode 100644
index 0000000..c627c30
--- /dev/null
+++ b/node_modules/jstransformer/package.json
@@ -0,0 +1,94 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "jstransformer@0.0.2",
+ "scope": null,
+ "escapedName": "jstransformer",
+ "name": "jstransformer",
+ "rawSpec": "0.0.2",
+ "spec": "0.0.2",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/jade"
+ ]
+ ],
+ "_from": "jstransformer@0.0.2",
+ "_id": "jstransformer@0.0.2",
+ "_inCache": true,
+ "_location": "/jstransformer",
+ "_nodeVersion": "1.6.2",
+ "_npmUser": {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ "_npmVersion": "2.7.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "jstransformer@0.0.2",
+ "scope": null,
+ "escapedName": "jstransformer",
+ "name": "jstransformer",
+ "rawSpec": "0.0.2",
+ "spec": "0.0.2",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/jade"
+ ],
+ "_resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz",
+ "_shasum": "7aae29a903d196cfa0973d885d3e47947ecd76ab",
+ "_shrinkwrap": null,
+ "_spec": "jstransformer@0.0.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/jade",
+ "author": {
+ "name": "ForbesLindesay"
+ },
+ "bugs": {
+ "url": "https://github.com/jstransformers/jstransformer/issues"
+ },
+ "dependencies": {
+ "is-promise": "^2.0.0",
+ "promise": "^6.0.1"
+ },
+ "description": "Normalize the API of any jstransformer",
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "istanbul": "^0.3.5",
+ "testit": "^1.2.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7aae29a903d196cfa0973d885d3e47947ecd76ab",
+ "tarball": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz"
+ },
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "gitHead": "99b40c1aa9fa984585aa50f4618d97a0287495c1",
+ "homepage": "https://github.com/jstransformers/jstransformer",
+ "keywords": [
+ "jstransformer"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ }
+ ],
+ "name": "jstransformer",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jstransformers/jstransformer.git"
+ },
+ "scripts": {
+ "coverage": "istanbul cover test",
+ "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls",
+ "test": "node test"
+ },
+ "version": "0.0.2"
+}
diff --git a/node_modules/kind-of/LICENSE b/node_modules/kind-of/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/kind-of/README.md b/node_modules/kind-of/README.md
new file mode 100644
index 0000000..193d328
--- /dev/null
+++ b/node_modules/kind-of/README.md
@@ -0,0 +1,258 @@
+# kind-of [](https://www.npmjs.com/package/kind-of) [](https://npmjs.org/package/kind-of) [](https://npmjs.org/package/kind-of) [](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+## Install
+
+Install with [bower](http://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+```
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+
+## About
+
+### Related projects
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 49 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/kind-of/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on December 07, 2016._
\ No newline at end of file
diff --git a/node_modules/kind-of/index.js b/node_modules/kind-of/index.js
new file mode 100644
index 0000000..8508386
--- /dev/null
+++ b/node_modules/kind-of/index.js
@@ -0,0 +1,116 @@
+var isBuffer = require('is-buffer');
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ // primitivies
+ if (typeof val === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (typeof val === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (typeof val === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (typeof val === 'function' || val instanceof Function) {
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ var type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+
+ // buffer
+ if (typeof Buffer !== 'undefined' && isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
diff --git a/node_modules/kind-of/package.json b/node_modules/kind-of/package.json
new file mode 100644
index 0000000..73fabeb
--- /dev/null
+++ b/node_modules/kind-of/package.json
@@ -0,0 +1,173 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "kind-of@^3.0.2",
+ "scope": null,
+ "escapedName": "kind-of",
+ "name": "kind-of",
+ "rawSpec": "^3.0.2",
+ "spec": ">=3.0.2 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/align-text"
+ ]
+ ],
+ "_from": "kind-of@>=3.0.2 <4.0.0",
+ "_id": "kind-of@3.1.0",
+ "_inCache": true,
+ "_location": "/kind-of",
+ "_nodeVersion": "6.7.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/kind-of-3.1.0.tgz_1481093733086_0.6179714468307793"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.10.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "kind-of@^3.0.2",
+ "scope": null,
+ "escapedName": "kind-of",
+ "name": "kind-of",
+ "rawSpec": "^3.0.2",
+ "spec": ">=3.0.2 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/align-text"
+ ],
+ "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz",
+ "_shasum": "475d698a5e49ff5e53d14e3e732429dc8bf4cf47",
+ "_shrinkwrap": null,
+ "_spec": "kind-of@^3.0.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/align-text",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "contributors": [
+ {
+ "name": "David Fox-Powell",
+ "email": "dtothefp@gmail.com",
+ "url": "https://dtothefp.github.io/me"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "email": "jon.schlinkert@sellside.com",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Miguel Mota",
+ "email": "miguel@mota.email",
+ "url": "https://miguelmota.com"
+ },
+ {
+ "name": "Peter deHaan",
+ "url": "http://about.me/peterdehaan"
+ }
+ ],
+ "dependencies": {
+ "is-buffer": "^1.0.2"
+ },
+ "description": "Get the native type of a value.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^0.2.5",
+ "browserify": "^13.1.0",
+ "glob": "^7.0.5",
+ "gulp-format-md": "^0.1.9",
+ "mocha": "^2.5.3",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "475d698a5e49ff5e53d14e3e732429dc8bf4cf47",
+ "tarball": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "eb57ad426b39f25902260f315a1f4ae50d2f760e",
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ }
+ ],
+ "name": "kind-of",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/kind-of.git"
+ },
+ "scripts": {
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare",
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb"
+ ]
+ },
+ "version": "3.1.0"
+}
diff --git a/node_modules/lazy-cache/LICENSE b/node_modules/lazy-cache/LICENSE
new file mode 100644
index 0000000..1e49edf
--- /dev/null
+++ b/node_modules/lazy-cache/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+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/node_modules/lazy-cache/README.md b/node_modules/lazy-cache/README.md
new file mode 100644
index 0000000..33b5a4d
--- /dev/null
+++ b/node_modules/lazy-cache/README.md
@@ -0,0 +1,147 @@
+# lazy-cache [](https://www.npmjs.com/package/lazy-cache) [](https://npmjs.org/package/lazy-cache) [](https://travis-ci.org/jonschlinkert/lazy-cache)
+
+> Cache requires to be lazy-loaded when needed.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install lazy-cache --save
+```
+
+If you use webpack and are experiencing issues, try using [unlazy-loader](https://github.com/doowb/unlazy-loader), a webpack loader that fixes the bug that prevents webpack from working with native javascript getters.
+
+## Usage
+
+```js
+var utils = require('lazy-cache')(require);
+```
+
+**Use as a property on `lazy`**
+
+The module is also added as a property to the `lazy` function
+so it can be called without having to call a function first.
+
+```js
+var utils = require('lazy-cache')(require);
+
+// `npm install glob`
+utils('glob');
+
+// glob sync
+console.log(utils.glob.sync('*.js'));
+
+// glob async
+utils.glob('*.js', function (err, files) {
+ console.log(files);
+});
+```
+
+**Use as a function**
+
+```js
+var utils = require('lazy-cache')(require);
+var glob = utils('glob');
+
+// `glob` is a now a function that may be called when needed
+glob().sync('foo/*.js');
+```
+
+## Aliases
+
+An alias may be passed as the second argument if you don't want to use the automatically camel-cased variable name.
+
+**Example**
+
+```js
+var utils = require('lazy-cache')(require);
+
+// alias `ansi-yellow` as `yellow`
+utils('ansi-yellow', 'yellow');
+console.log(utils.yellow('foo'));
+```
+
+## Browserify usage
+
+**Example**
+
+```js
+var utils = require('lazy-cache')(require);
+// temporarily re-assign `require` to trick browserify
+var fn = require;
+require = utils;
+// list module dependencies (here, `require` is actually `lazy-cache`)
+require('glob');
+require = fn; // restore the native `require` function
+
+/**
+ * Now you can use glob with the `utils.glob` variable
+ */
+
+// sync
+console.log(utils.glob.sync('*.js'));
+
+// async
+utils.glob('*.js', function (err, files) {
+ console.log(files.join('\n'));
+});
+```
+
+## Kill switch
+
+In certain rare edge cases it may be necessary to unlazy all lazy-cached dependencies (5 reported cases after ~30 million downloads).
+
+To force lazy-cache to immediately invoke all dependencies, do:
+
+```js
+process.env.UNLAZY = true;
+```
+
+## Related projects
+
+You might also be interested in these projects:
+
+[lint-deps](https://www.npmjs.com/package/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://www.npmjs.com/package/lint-deps) | [homepage](https://github.com/jonschlinkert/lint-deps)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/lazy-cache/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/lazy-cache/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on April 22, 2016._
\ No newline at end of file
diff --git a/node_modules/lazy-cache/index.js b/node_modules/lazy-cache/index.js
new file mode 100644
index 0000000..da7897d
--- /dev/null
+++ b/node_modules/lazy-cache/index.js
@@ -0,0 +1,67 @@
+'use strict';
+
+/**
+ * Cache results of the first function call to ensure only calling once.
+ *
+ * ```js
+ * var utils = require('lazy-cache')(require);
+ * // cache the call to `require('ansi-yellow')`
+ * utils('ansi-yellow', 'yellow');
+ * // use `ansi-yellow`
+ * console.log(utils.yellow('this is yellow'));
+ * ```
+ *
+ * @param {Function} `fn` Function that will be called only once.
+ * @return {Function} Function that can be called to get the cached function
+ * @api public
+ */
+
+function lazyCache(fn) {
+ var cache = {};
+ var proxy = function(mod, name) {
+ name = name || camelcase(mod);
+
+ // check both boolean and string in case `process.env` cases to string
+ if (process.env.UNLAZY === 'true' || process.env.UNLAZY === true || process.env.TRAVIS) {
+ cache[name] = fn(mod);
+ }
+
+ Object.defineProperty(proxy, name, {
+ enumerable: true,
+ configurable: true,
+ get: getter
+ });
+
+ function getter() {
+ if (cache.hasOwnProperty(name)) {
+ return cache[name];
+ }
+ return (cache[name] = fn(mod));
+ }
+ return getter;
+ };
+ return proxy;
+}
+
+/**
+ * Used to camelcase the name to be stored on the `lazy` object.
+ *
+ * @param {String} `str` String containing `_`, `.`, `-` or whitespace that will be camelcased.
+ * @return {String} camelcased string.
+ */
+
+function camelcase(str) {
+ if (str.length === 1) {
+ return str.toLowerCase();
+ }
+ str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase();
+ return str.replace(/[\W_]+(\w|$)/g, function(_, ch) {
+ return ch.toUpperCase();
+ });
+}
+
+/**
+ * Expose `lazyCache`
+ */
+
+module.exports = lazyCache;
diff --git a/node_modules/lazy-cache/package.json b/node_modules/lazy-cache/package.json
new file mode 100644
index 0000000..24c7ced
--- /dev/null
+++ b/node_modules/lazy-cache/package.json
@@ -0,0 +1,129 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lazy-cache@^1.0.3",
+ "scope": null,
+ "escapedName": "lazy-cache",
+ "name": "lazy-cache",
+ "rawSpec": "^1.0.3",
+ "spec": ">=1.0.3 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/center-align"
+ ]
+ ],
+ "_from": "lazy-cache@>=1.0.3 <2.0.0",
+ "_id": "lazy-cache@1.0.4",
+ "_inCache": true,
+ "_location": "/lazy-cache",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/lazy-cache-1.0.4.tgz_1461378859142_0.0996799839194864"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.6.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lazy-cache@^1.0.3",
+ "scope": null,
+ "escapedName": "lazy-cache",
+ "name": "lazy-cache",
+ "rawSpec": "^1.0.3",
+ "spec": ">=1.0.3 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/center-align"
+ ],
+ "_resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "_shasum": "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e",
+ "_shrinkwrap": null,
+ "_spec": "lazy-cache@^1.0.3",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/center-align",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/lazy-cache/issues"
+ },
+ "dependencies": {},
+ "description": "Cache requires to be lazy-loaded when needed.",
+ "devDependencies": {
+ "ansi-yellow": "^0.1.1",
+ "glob": "^7.0.3",
+ "gulp-format-md": "^0.1.8",
+ "mocha": "^2.4.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e",
+ "tarball": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "d081ffbda147391083a6856fafb1c5d82308f80c",
+ "homepage": "https://github.com/jonschlinkert/lazy-cache",
+ "keywords": [
+ "cache",
+ "caching",
+ "dependencies",
+ "dependency",
+ "lazy",
+ "require",
+ "requires"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ }
+ ],
+ "name": "lazy-cache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/lazy-cache.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "related": {
+ "list": [
+ "lint-deps"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb"
+ ]
+ },
+ "version": "1.0.4"
+}
diff --git a/node_modules/lcid/index.js b/node_modules/lcid/index.js
new file mode 100644
index 0000000..69bd3d2
--- /dev/null
+++ b/node_modules/lcid/index.js
@@ -0,0 +1,22 @@
+'use strict';
+var invertKv = require('invert-kv');
+var all = require('./lcid.json');
+var inverted = invertKv(all);
+
+exports.from = function (lcidCode) {
+ if (typeof lcidCode !== 'number') {
+ throw new TypeError('Expected a number');
+ }
+
+ return inverted[lcidCode];
+};
+
+exports.to = function (localeId) {
+ if (typeof localeId !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ return all[localeId];
+};
+
+exports.all = all;
diff --git a/node_modules/lcid/lcid.json b/node_modules/lcid/lcid.json
new file mode 100644
index 0000000..9c89f6a
--- /dev/null
+++ b/node_modules/lcid/lcid.json
@@ -0,0 +1,203 @@
+{
+ "af_ZA": 1078,
+ "am_ET": 1118,
+ "ar_AE": 14337,
+ "ar_BH": 15361,
+ "ar_DZ": 5121,
+ "ar_EG": 3073,
+ "ar_IQ": 2049,
+ "ar_JO": 11265,
+ "ar_KW": 13313,
+ "ar_LB": 12289,
+ "ar_LY": 4097,
+ "ar_MA": 6145,
+ "ar_OM": 8193,
+ "ar_QA": 16385,
+ "ar_SA": 1025,
+ "ar_SY": 10241,
+ "ar_TN": 7169,
+ "ar_YE": 9217,
+ "arn_CL": 1146,
+ "as_IN": 1101,
+ "az_AZ": 2092,
+ "ba_RU": 1133,
+ "be_BY": 1059,
+ "bg_BG": 1026,
+ "bn_IN": 1093,
+ "bo_BT": 2129,
+ "bo_CN": 1105,
+ "br_FR": 1150,
+ "bs_BA": 8218,
+ "ca_ES": 1027,
+ "co_FR": 1155,
+ "cs_CZ": 1029,
+ "cy_GB": 1106,
+ "da_DK": 1030,
+ "de_AT": 3079,
+ "de_CH": 2055,
+ "de_DE": 1031,
+ "de_LI": 5127,
+ "de_LU": 4103,
+ "div_MV": 1125,
+ "dsb_DE": 2094,
+ "el_GR": 1032,
+ "en_AU": 3081,
+ "en_BZ": 10249,
+ "en_CA": 4105,
+ "en_CB": 9225,
+ "en_GB": 2057,
+ "en_IE": 6153,
+ "en_IN": 18441,
+ "en_JA": 8201,
+ "en_MY": 17417,
+ "en_NZ": 5129,
+ "en_PH": 13321,
+ "en_TT": 11273,
+ "en_US": 1033,
+ "en_ZA": 7177,
+ "en_ZW": 12297,
+ "es_AR": 11274,
+ "es_BO": 16394,
+ "es_CL": 13322,
+ "es_CO": 9226,
+ "es_CR": 5130,
+ "es_DO": 7178,
+ "es_EC": 12298,
+ "es_ES": 3082,
+ "es_GT": 4106,
+ "es_HN": 18442,
+ "es_MX": 2058,
+ "es_NI": 19466,
+ "es_PA": 6154,
+ "es_PE": 10250,
+ "es_PR": 20490,
+ "es_PY": 15370,
+ "es_SV": 17418,
+ "es_UR": 14346,
+ "es_US": 21514,
+ "es_VE": 8202,
+ "et_EE": 1061,
+ "eu_ES": 1069,
+ "fa_IR": 1065,
+ "fi_FI": 1035,
+ "fil_PH": 1124,
+ "fo_FO": 1080,
+ "fr_BE": 2060,
+ "fr_CA": 3084,
+ "fr_CH": 4108,
+ "fr_FR": 1036,
+ "fr_LU": 5132,
+ "fr_MC": 6156,
+ "fy_NL": 1122,
+ "ga_IE": 2108,
+ "gbz_AF": 1164,
+ "gl_ES": 1110,
+ "gsw_FR": 1156,
+ "gu_IN": 1095,
+ "ha_NG": 1128,
+ "he_IL": 1037,
+ "hi_IN": 1081,
+ "hr_BA": 4122,
+ "hr_HR": 1050,
+ "hu_HU": 1038,
+ "hy_AM": 1067,
+ "id_ID": 1057,
+ "ii_CN": 1144,
+ "is_IS": 1039,
+ "it_CH": 2064,
+ "it_IT": 1040,
+ "iu_CA": 2141,
+ "ja_JP": 1041,
+ "ka_GE": 1079,
+ "kh_KH": 1107,
+ "kk_KZ": 1087,
+ "kl_GL": 1135,
+ "kn_IN": 1099,
+ "ko_KR": 1042,
+ "kok_IN": 1111,
+ "ky_KG": 1088,
+ "lb_LU": 1134,
+ "lo_LA": 1108,
+ "lt_LT": 1063,
+ "lv_LV": 1062,
+ "mi_NZ": 1153,
+ "mk_MK": 1071,
+ "ml_IN": 1100,
+ "mn_CN": 2128,
+ "mn_MN": 1104,
+ "moh_CA": 1148,
+ "mr_IN": 1102,
+ "ms_BN": 2110,
+ "ms_MY": 1086,
+ "mt_MT": 1082,
+ "my_MM": 1109,
+ "nb_NO": 1044,
+ "ne_NP": 1121,
+ "nl_BE": 2067,
+ "nl_NL": 1043,
+ "nn_NO": 2068,
+ "ns_ZA": 1132,
+ "oc_FR": 1154,
+ "or_IN": 1096,
+ "pa_IN": 1094,
+ "pl_PL": 1045,
+ "ps_AF": 1123,
+ "pt_BR": 1046,
+ "pt_PT": 2070,
+ "qut_GT": 1158,
+ "quz_BO": 1131,
+ "quz_EC": 2155,
+ "quz_PE": 3179,
+ "rm_CH": 1047,
+ "ro_RO": 1048,
+ "ru_RU": 1049,
+ "rw_RW": 1159,
+ "sa_IN": 1103,
+ "sah_RU": 1157,
+ "se_FI": 3131,
+ "se_NO": 1083,
+ "se_SE": 2107,
+ "si_LK": 1115,
+ "sk_SK": 1051,
+ "sl_SI": 1060,
+ "sma_NO": 6203,
+ "sma_SE": 7227,
+ "smj_NO": 4155,
+ "smj_SE": 5179,
+ "smn_FI": 9275,
+ "sms_FI": 8251,
+ "sq_AL": 1052,
+ "sr_BA": 7194,
+ "sr_SP": 3098,
+ "sv_FI": 2077,
+ "sv_SE": 1053,
+ "sw_KE": 1089,
+ "syr_SY": 1114,
+ "ta_IN": 1097,
+ "te_IN": 1098,
+ "tg_TJ": 1064,
+ "th_TH": 1054,
+ "tk_TM": 1090,
+ "tmz_DZ": 2143,
+ "tn_ZA": 1074,
+ "tr_TR": 1055,
+ "tt_RU": 1092,
+ "ug_CN": 1152,
+ "uk_UA": 1058,
+ "ur_IN": 2080,
+ "ur_PK": 1056,
+ "uz_UZ": 2115,
+ "vi_VN": 1066,
+ "wen_DE": 1070,
+ "wo_SN": 1160,
+ "xh_ZA": 1076,
+ "yo_NG": 1130,
+ "zh_CHS": 4,
+ "zh_CHT": 31748,
+ "zh_CN": 2052,
+ "zh_HK": 3076,
+ "zh_MO": 5124,
+ "zh_SG": 4100,
+ "zh_TW": 1028,
+ "zu_ZA": 1077
+}
diff --git a/node_modules/lcid/license b/node_modules/lcid/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/lcid/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/lcid/package.json b/node_modules/lcid/package.json
new file mode 100644
index 0000000..8443c35
--- /dev/null
+++ b/node_modules/lcid/package.json
@@ -0,0 +1,109 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lcid@^1.0.0",
+ "scope": null,
+ "escapedName": "lcid",
+ "name": "lcid",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/os-locale"
+ ]
+ ],
+ "_from": "lcid@>=1.0.0 <2.0.0",
+ "_id": "lcid@1.0.0",
+ "_inCache": true,
+ "_location": "/lcid",
+ "_nodeVersion": "0.12.0",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.5.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lcid@^1.0.0",
+ "scope": null,
+ "escapedName": "lcid",
+ "name": "lcid",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/os-locale"
+ ],
+ "_resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "_shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835",
+ "_shrinkwrap": null,
+ "_spec": "lcid@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/os-locale",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/lcid/issues"
+ },
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)",
+ "devDependencies": {
+ "ava": "0.0.4"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835",
+ "tarball": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "lcid.json"
+ ],
+ "gitHead": "96bb3e617f77f5f8ceb78653c77de5a85abb3b1e",
+ "homepage": "https://github.com/sindresorhus/lcid",
+ "keywords": [
+ "lcid",
+ "locale",
+ "string",
+ "str",
+ "id",
+ "identifier",
+ "windows",
+ "language",
+ "lang",
+ "map",
+ "mapping",
+ "convert",
+ "json",
+ "bcp47",
+ "ietf",
+ "tag"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "lcid",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/lcid.git"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "version": "1.0.0"
+}
diff --git a/node_modules/lcid/readme.md b/node_modules/lcid/readme.md
new file mode 100644
index 0000000..bee4a70
--- /dev/null
+++ b/node_modules/lcid/readme.md
@@ -0,0 +1,35 @@
+# lcid [](https://travis-ci.org/sindresorhus/lcid)
+
+> Mapping between [standard locale identifiers](http://en.wikipedia.org/wiki/Locale) and [Windows locale identifiers (LCID)](http://en.wikipedia.org/wiki/Locale#Specifics_for_Microsoft_platforms)
+
+Based on the [mapping](https://github.com/python/cpython/blob/be2a1a76fa43bb1ea1b3577bb5bdd506a2e90e37/Lib/locale.py#L1395-L1604) used in the Python standard library.
+
+The mapping itself is just a [JSON file](lcid.json) and can be used wherever.
+
+
+## Install
+
+```
+$ npm install --save lcid
+```
+
+
+## Usage
+
+```js
+var lcid = require('lcid');
+
+lcid.from(1044);
+//=> 'nb_NO'
+
+lcid.to('nb_NO');
+//=> 1044
+
+lcid.all;
+//=> {'af_ZA': 1078, ...}
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/liftoff/.jscsrc b/node_modules/liftoff/.jscsrc
new file mode 100644
index 0000000..af3c78e
--- /dev/null
+++ b/node_modules/liftoff/.jscsrc
@@ -0,0 +1,60 @@
+{
+ "esnext": true,
+ "disallowMixedSpacesAndTabs": true,
+ "disallowSpaceAfterObjectKeys": true,
+ "disallowSpaceBeforeBinaryOperators": [
+ ","
+ ],
+ "disallowSpacesInsideArrayBrackets": true,
+ "disallowSpacesInsideParentheses": true,
+ "disallowTrailingWhitespace": true,
+ "requireCommaBeforeLineBreak": true,
+ "requireLineFeedAtFileEnd": true,
+ "requireSpaceAfterBinaryOperators": [
+ "=",
+ ",",
+ "+",
+ "-",
+ "/",
+ "*",
+ "==",
+ "===",
+ "!=",
+ "!==",
+ ":",
+ "&&",
+ "||"
+ ],
+ "requireSpaceAfterKeywords": [
+ "if",
+ "else",
+ "for",
+ "while",
+ "do",
+ "switch",
+ "return",
+ "try",
+ "catch"
+ ],
+ "requireSpaceBeforeBinaryOperators": [
+ "=",
+ "+",
+ "-",
+ "/",
+ "*",
+ "==",
+ "===",
+ "!=",
+ "!==",
+ "&&",
+ "||"
+ ],
+ "requireSpaceBeforeBlockStatements": true,
+ "requireSpacesInFunctionExpression": {
+ "beforeOpeningCurlyBrace": true
+ },
+ "validateQuoteMarks": {
+ "escape": true,
+ "mark": "'"
+ }
+}
diff --git a/node_modules/liftoff/.jshintrc b/node_modules/liftoff/.jshintrc
new file mode 100644
index 0000000..6871084
--- /dev/null
+++ b/node_modules/liftoff/.jshintrc
@@ -0,0 +1,11 @@
+{
+ "undef": true,
+ "unused": true,
+ "node": true,
+ "esnext": true,
+ "expr": true,
+ "globals": {
+ "describe": true,
+ "it": true
+ }
+}
diff --git a/node_modules/liftoff/.npmignore b/node_modules/liftoff/.npmignore
new file mode 100644
index 0000000..9c9c73b
--- /dev/null
+++ b/node_modules/liftoff/.npmignore
@@ -0,0 +1,2 @@
+test
+artwork
diff --git a/node_modules/liftoff/.travis.yml b/node_modules/liftoff/.travis.yml
new file mode 100644
index 0000000..61ec9ec
--- /dev/null
+++ b/node_modules/liftoff/.travis.yml
@@ -0,0 +1,16 @@
+language: node_js
+os:
+ - linux
+ - osx
+node_js:
+ - "6"
+ - "5"
+ - "4"
+ - "0.12"
+ - "0.10"
+before_install:
+ - npm update -g npm
+matrix:
+ fast_finish: true
+ allow_failures:
+ - node_js: "0.10"
diff --git a/node_modules/liftoff/CHANGELOG b/node_modules/liftoff/CHANGELOG
new file mode 100644
index 0000000..ee5b84d
--- /dev/null
+++ b/node_modules/liftoff/CHANGELOG
@@ -0,0 +1,127 @@
+v2.2.2:
+ date: 2016-05-20
+ changes:
+ - Update dependencies.
+v2.2.1:
+ date: 2016-03-23
+ changes:
+ - Make sure that v8 flags are passed properly through the `respawn` event
+v2.1.0:
+ date: 2015-05-20
+ changes:
+ - Use rechoir to autoload modules.
+v2.0.3:
+ date: 2015-03-31
+ changes:
+ - Internal bugfix, don't wrap callback error in another error, idiot.
+v2.0.2:
+ date: 2015-02-24
+ changes:
+ - Support process.env.NODE_PATH when resolving module.
+v2.0.1:
+ date: 2015-02-01
+ changes:
+ - Find modulePath correctly when devving against yourself.
+v2.0.0:
+ date: 2015-01-15
+ changes:
+ - Rename `nodeFlags` to `v8Flags` and make it async.
+v1.0.4:
+ date: 2015-01-04
+ changes:
+ - Detect config extension using basename, not full path.
+v1.0.0:
+ date: 2014-12-16
+ changes:
+ - Update dependencies
+v0.13.6:
+ date: 2014-11-07
+ changes:
+ - Don't include artwork on npm.
+v0.13.5:
+ date: 2014-10-10
+ changes:
+ - Only attempt to resolve the real path of configFile if it is actually a symlink.
+v0.13.4:
+ date: 2014-10-07
+ changes:
+ - Set configBase to the directory of the symlink, not the directory of its real location.
+v0.13.3:
+ date: 2014-10-06
+ changes:
+ - Return the real location of symlinked config files.
+v0.13.2:
+ date: 2014-09-12
+ changes:
+ - Include flags in respawn event. I really miss `npm publish --force`.
+v0.13.1:
+ date: 2014-09-12
+ changes:
+ - Slight performance tweak.
+v0.13.0:
+ date: 2014-09-12
+ changes:
+ - Support passing flags to node with `nodeFlags` option.
+v0.12.1:
+ date: 2014-06-27
+ changes:
+ - Support preloading modules for compound extensions like `.coffee.md`.
+v0.12.0:
+ date: 2014-06-27
+ changes:
+ - Respect order of extensions when searching for config.
+ - Rename `configNameRegex` environment property to `configNameSearch`.
+v0.11.3:
+ date: 2014-06-09
+ changes:
+ - Make cwd match configBase if cwd isn't explictly provided
+v0.11.2:
+ date: 2014-06-04
+ changes:
+ - Regression fix: coerce preloads into array before attempting to push more
+v0.11.1:
+ date: 2014-06-02
+ changes:
+ - Update dependencies.
+v0.11.0:
+ date: 2014-05-27
+ changes:
+ - Refactor and remove options parsing.
+v0.10.0:
+ date: 2014-05-06
+ changes:
+ - Remove `addExtension` in favor of `extension` option.
+ - Support preloading modules based on extension.
+v0.9.7:
+ date: 2014-04-28
+ changes:
+ - Locate local module in cwd even if config isn't present.
+v0.9.6:
+ date: 2014-04-02
+ changes:
+ - Fix regression where external modules are not properly required.
+ - Ignore configPathFlag / cwdFlag if the value isn't a string
+v0.9.3:
+ date: 2014-02-28
+ changes:
+ - Fix regression where developing against self doesn't correctly set cwd.
+v0.9.0:
+ date: 2014-02-28
+ changes:
+ - Use liftoff instance as context (`this`) for launch callback.
+ - Support split --cwd and --configfile locations.
+ - Rename `configLocationFlag` to `configPathFlag`
+ - Support node 0.8+
+v0.8.7:
+ date: 2014-02-24
+ changes:
+ - Pass environment as first argument to `launch`.
+v0.8.5:
+ date: 2014-02-19
+ changes:
+ - Implement `addExtensions` option.
+ - Default to `index.js` if `modulePackage` has no `main` property.
+v0.8.4:
+ date: 2014-02-05
+ changes:
+ - Initial public release.
diff --git a/node_modules/liftoff/LICENSE b/node_modules/liftoff/LICENSE
new file mode 100644
index 0000000..a55f5b7
--- /dev/null
+++ b/node_modules/liftoff/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2014 Tyler Kellen
+
+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/node_modules/liftoff/README.md b/node_modules/liftoff/README.md
new file mode 100644
index 0000000..9a5a0ae
--- /dev/null
+++ b/node_modules/liftoff/README.md
@@ -0,0 +1,429 @@
+
+
+
+
+
+
+# liftoff [](http://travis-ci.org/js-cli/js-liftoff) [](https://ci.appveyor.com/project/js-cli/js-liftoff/branch/master)
+
+> Launch your command line tool with ease.
+
+[](https://nodei.co/npm/liftoff/)
+
+## What is it?
+[See this blog post](http://weblog.bocoup.com/building-command-line-tools-in-node-with-liftoff/), [check out this proof of concept](https://github.com/js-cli/js-hacker), or read on.
+
+Say you're writing a CLI tool. Let's call it [hacker](https://github.com/js-cli/js-hacker). You want to configure it using a `Hackerfile`. This is node, so you install `hacker` locally for each project you use it in. But, in order to get the `hacker` command in your PATH, you also install it globally.
+
+Now, when you run `hacker`, you want to configure what it does using the `Hackerfile` in your current directory, and you want it to execute using the local installation of your tool. Also, it'd be nice if the `hacker` command was smart enough to traverse up your folders until it finds a `Hackerfile`—for those times when you're not in the root directory of your project. Heck, you might even want to launch `hacker` from a folder outside of your project by manually specifying a working directory. Liftoff manages this for you.
+
+So, everything is working great. Now you can find your local `hacker` and `Hackerfile` with ease. Unfortunately, it turns out you've authored your `Hackerfile` in coffee-script, or some other JS variant. In order to support *that*, you have to load the compiler for it, and then register the extension for it with node. Good news, Liftoff can do that, and a whole lot more, too.
+
+## API
+
+### constructor(opts)
+
+Create an instance of Liftoff to invoke your application.
+
+An example utilizing all options:
+```js
+const Hacker = new Liftoff({
+ name: 'hacker',
+ processTitle: 'hacker',
+ moduleName: 'hacker',
+ configName: 'hackerfile',
+ extensions: {
+ '.js': null,
+ '.json': null,
+ '.coffee': 'coffee-script/register'
+ },
+ v8flags: ['--harmony'] // or v8flags: require('v8flags')
+});
+```
+
+#### opts.name
+
+Sugar for setting `processTitle`, `moduleName`, `configName` automatically.
+
+Type: `String`
+Default: `null`
+
+These are equivalent:
+```js
+const Hacker = Liftoff({
+ processTitle: 'hacker',
+ moduleName: 'hacker',
+ configName: 'hackerfile'
+});
+```
+```js
+const Hacker = Liftoff({name:'hacker'});
+```
+
+#### opts.moduleName
+
+Sets which module your application expects to find locally when being run.
+
+Type: `String`
+Default: `null`
+
+#### opts.configName
+
+Sets the name of the configuration file Liftoff will attempt to find. Case-insensitive.
+
+Type: `String`
+Default: `null`
+
+#### opts.extensions
+
+Set extensions to include when searching for a configuration file. If an external module is needed to load a given extension (e.g. `.coffee`), the module name should be specified as the value for the key.
+
+Type: `Object`
+Default: `{".js":null,".json":null}`
+
+**Examples:**
+
+In this example Liftoff will look for `myappfile{.js,.json,.coffee}`. If a config with the extension `.coffee` is found, Liftoff will try to require `coffee-script/require` from the current working directory.
+```js
+const MyApp = new Liftoff({
+ name: 'myapp',
+ extensions: {
+ '.js': null,
+ '.json': null,
+ '.coffee': 'coffee-script/register'
+ }
+});
+```
+
+In this example, Liftoff will look for `.myapp{rc}`.
+```js
+const MyApp = new Liftoff({
+ name: 'myapp',
+ configName: '.myapp',
+ extensions: {
+ 'rc': null
+ }
+});
+```
+
+In this example, Liftoff will automatically attempt to load the correct module for any javascript variant supported by [node-interpret](https://github.com/tkellen/node-interpret) (as long as it does not require a register method).
+
+```js
+const MyApp = new Liftoff({
+ name: 'myapp',
+ extensions: require('interpret').jsVariants
+});
+```
+#### opts.v8flags
+
+Any flag specified here will be applied to node, not your program. Useful for supporting invocations like `myapp --harmony command`, where `--harmony` should be passed to node, not your program. This functionality is implemented using [flagged-respawn](http://github.com/tkellen/node-flagged-respawn). To support all v8flags, see [node-v8flags](https://github.com/tkellen/node-v8flags).
+
+Type: `Array|Function`
+Default: `null`
+
+If this method is a function, it should take a node-style callback that yields an array of flags.
+
+#### opts.processTitle
+
+Sets what the [process title](http://nodejs.org/api/process.html#process_process_title) will be.
+
+Type: `String`
+Default: `null`
+
+#### opts.completions(type)
+
+A method to handle bash/zsh/whatever completions.
+
+Type: `Function`
+Default: `null`
+
+#### opts.configFiles
+
+An object of configuration files to find. Each property is keyed by the default basename of the file being found, and the value is an object of [path arguments](#path-arguments) keyed by unique names.
+
+__Note:__ This option is useful if, for example, you want to support an `.apprc` file in addition to an `appfile.js`. If you only need a single configuration file, you probably don't need this. In addition to letting you find multiple files, this option allows more fine-grained control over how configuration files are located.
+
+Type: `Object`
+Default: `null`
+
+#### Path arguments
+
+The [`fined`](https://github.com/js-cli/fined) module accepts a string representing the path to search or an object with the following keys:
+
+* `path` __(required)__
+
+ The path to search. Using only a string expands to this property.
+
+ Type: `String`
+ Default: `null`
+
+* `name`
+
+ The basename of the file to find. Extensions are appended during lookup.
+
+ Type: `String`
+ Default: Top-level key in `configFiles`
+
+* `extensions`
+
+ The extensions to append to `name` during lookup. See also: [`opts.extensions`](#optsextensions).
+
+ Type: `String|Array|Object`
+ Default: The value of [`opts.extensions`](#optsextensions)
+
+* `cwd`
+
+ The base directory of `path` (if relative).
+
+ Type: `String`
+ Default: The value of [`opts.cwd`](#optscwd)
+
+* `findUp`
+
+ Whether the `path` should be traversed up to find the file.
+
+ Type: `Boolean`
+ Default: `false`
+
+**Examples:**
+
+In this example Liftoff will look for the `.hacker.js` file relative to the `cwd` as declared in `configFiles`.
+```js
+const MyApp = new Liftoff({
+ name: 'hacker',
+ configFiles: {
+ '.hacker': {
+ cwd: '.'
+ }
+ }
+});
+```
+
+In this example, Liftoff will look for `.hackerrc` in the home directory.
+```js
+const MyApp = new Liftoff({
+ name: 'hacker',
+ configFiles: {
+ '.hacker': {
+ home: {
+ path: '~',
+ extensions: {
+ 'rc': null
+ }
+ }
+ }
+ }
+});
+```
+
+In this example, Liftoff will look in the `cwd` and then lookup the tree for the `.hacker.js` file.
+```js
+const MyApp = new Liftoff({
+ name: 'hacker',
+ configFiles: {
+ '.hacker': {
+ up: {
+ path: '.',
+ findUp: true
+ }
+ }
+ }
+});
+```
+
+In this example, the `name` is overridden and the key is ignored so Liftoff looks for `.override.js`.
+```js
+const MyApp = new Liftoff({
+ name: 'hacker',
+ configFiles: {
+ hacker: {
+ override: {
+ path: '.',
+ name: '.override'
+ }
+ }
+ }
+});
+```
+
+In this example, Liftoff will use the home directory as the `cwd` and looks for `~/.hacker.js`.
+```js
+const MyApp = new Liftoff({
+ name: 'hacker',
+ configFiles: {
+ '.hacker': {
+ home: {
+ path: '.',
+ cwd: '~'
+ }
+ }
+ }
+});
+```
+
+## launch(opts, callback(env))
+Launches your application with provided options, builds an environment, and invokes your callback, passing the calculated environment as the first argument.
+
+##### Example Configuration w/ Options Parsing:
+```js
+const Liftoff = require('liftoff');
+const MyApp = new Liftoff({name:'myapp'});
+const argv = require('minimist')(process.argv.slice(2));
+const invoke = function (env) {
+ console.log('my environment is:', env);
+ console.log('my cli options are:', argv);
+ console.log('my liftoff config is:', this);
+};
+MyApp.launch({
+ cwd: argv.cwd,
+ configPath: argv.myappfile,
+ require: argv.require,
+ completion: argv.completion
+}, invoke);
+```
+
+#### opts.cwd
+
+Change the current working directory for this launch. Relative paths are calculated against `process.cwd()`.
+
+Type: `String`
+Default: `process.cwd()`
+
+**Example Configuration:**
+```js
+const argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+ cwd: argv.cwd
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```
+myapp --cwd ../
+```
+
+#### opts.configPath
+
+Don't search for a config, use the one provided. **Note:** Liftoff will assume the current working directory is the directory containing the config file unless an alternate location is explicitly specified using `cwd`.
+
+Type: `String`
+Default: `null`
+
+**Example Configuration:**
+```js
+var argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+ configPath: argv.myappfile
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```
+myapp --myappfile /var/www/project/Myappfile.js
+```
+
+**Examples using `cwd` and `configPath` together:**
+
+These are functionally identical:
+```
+myapp --myappfile /var/www/project/Myappfile.js
+myapp --cwd /var/www/project
+```
+
+These can run myapp from a shared directory as though it were located in another project:
+```
+myapp --myappfile /Users/name/Myappfile.js --cwd /var/www/project1
+myapp --myappfile /Users/name/Myappfile.js --cwd /var/www/project2
+```
+
+#### opts.require
+
+A string or array of modules to attempt requiring from the local working directory before invoking the launch callback.
+
+Type: `String|Array`
+Default: `null`
+
+**Example Configuration:**
+```js
+var argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+ require: argv.require
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```js
+myapp --require coffee-script/register
+```
+
+#### callback(env)
+
+A function to start your application. When invoked, `this` will be your instance of Liftoff. The `env` param will contain the following keys:
+
+- `cwd`: the current working directory
+- `require`: an array of modules that liftoff tried to pre-load
+- `configNameSearch`: the config files searched for
+- `configPath`: the full path to your configuration file (if found)
+- `configBase`: the base directory of your configuration file (if found)
+- `modulePath`: the full path to the local module your project relies on (if found)
+- `modulePackage`: the contents of the local module's package.json (if found)
+- `configFiles`: an object of filepaths for each found config file (filepath values will be null if not found)
+
+### events
+
+#### require(name, module)
+
+Emitted when a module is pre-loaded.
+
+```js
+var Hacker = new Liftoff({name:'hacker'});
+Hacker.on('require', function (name, module) {
+ console.log('Requiring external module: '+name+'...');
+ // automatically register coffee-script extensions
+ if (name === 'coffee-script') {
+ module.register();
+ }
+});
+```
+
+#### requireFail(name, err)
+
+Emitted when a requested module cannot be preloaded.
+
+```js
+var Hacker = new Liftoff({name:'hacker'});
+Hacker.on('requireFail', function (name, err) {
+ console.log('Unable to load:', name, err);
+});
+```
+
+#### respawn(flags, child)
+
+Emitted when Liftoff re-spawns your process (when a [`v8flags`](#optsv8flags) is detected).
+
+```js
+var Hacker = new Liftoff({
+ name: 'hacker',
+ v8flags: ['--harmony']
+});
+Hacker.on('respawn', function (flags, child) {
+ console.log('Detected node flags:', flags);
+ console.log('Respawned to PID:', child.pid);
+});
+```
+
+Event will be triggered for this command:
+`hacker --harmony commmand`
+
+## Examples
+
+Check out how [gulp](https://github.com/gulpjs/gulp/blob/master/bin/gulp.js) uses Liftoff.
+
+For a bare-bones example, try [the hacker project](https://github.com/js-cli/js-hacker/blob/master/bin/hacker.js).
+
+To try the example, do the following:
+
+1. Install the sample project `hacker` with `npm install -g hacker`.
+2. Make a `Hackerfile.js` with some arbitrary javascript it.
+3. Install hacker next to it with `npm install hacker`.
+3. Run `hacker` while in the same parent folder.
diff --git a/node_modules/liftoff/UPGRADING.md b/node_modules/liftoff/UPGRADING.md
new file mode 100644
index 0000000..7f95e3e
--- /dev/null
+++ b/node_modules/liftoff/UPGRADING.md
@@ -0,0 +1,28 @@
+# 1.0.0 -> 2.0.0
+The option `nodeFlags` was renamed to `v8flags` for accuracy. It can now be a callback taking method that yields an array of flags, **or** an array literal.
+
+# 0.11 -> 0.12
+For the environment passed into the `launch` callback, `configNameRegex` has been renamed to `configNameSearch`. It now returns an array of valid config names instead of a regular expression.
+
+# 0.10 -> 0.11
+The method signature for `launch` was changed in this version of Liftoff.
+
+You must now provide your own options parser and pass your desired params directly into `launch` as the first argument. The second argument is now the invocation callback that starts your application.
+
+To replicate the default functionality of 0.10, use the following:
+```js
+const Liftoff = require('liftoff');
+const MyApp = new Liftoff({name:'myapp'});
+const argv = require('minimist')(process.argv.slice(2));
+const invoke = function (env) {
+ console.log('my environment is:', env);
+ console.log('my cli options are:', argv);
+ console.log('my liftoff config is:', this);
+};
+MyApp.launch({
+ cwd: argv.cwd,
+ configPath: argv.myappfile,
+ require: argv.require,
+ completion: argv.completion
+}, invoke);
+```
diff --git a/node_modules/liftoff/appveyor.yml b/node_modules/liftoff/appveyor.yml
new file mode 100644
index 0000000..bcb6b74
--- /dev/null
+++ b/node_modules/liftoff/appveyor.yml
@@ -0,0 +1,29 @@
+# http://www.appveyor.com/docs/appveyor-yml
+# http://www.appveyor.com/docs/lang/nodejs-iojs
+
+environment:
+ matrix:
+ # node.js
+ - nodejs_version: "0.10"
+ - nodejs_version: "0.12"
+ - nodejs_version: "4"
+ - nodejs_version: "5"
+ - nodejs_version: "6"
+
+install:
+ - IF %nodejs_version% EQU 0.10 npm -g install npm@2
+ - IF %nodejs_version% EQU 0.10 set PATH=%APPDATA%\npm;%PATH%
+ - ps: Install-Product node $env:nodejs_version
+ - npm install
+
+test_script:
+ - node --version
+ - npm --version
+ # power shell
+ - ps: "npm test"
+ # standard command line
+ - cmd: npm test
+
+build: off
+
+version: "{build}"
diff --git a/node_modules/liftoff/index.js b/node_modules/liftoff/index.js
new file mode 100644
index 0000000..0c0a8d5
--- /dev/null
+++ b/node_modules/liftoff/index.js
@@ -0,0 +1,210 @@
+const fs = require('fs');
+const util = require('util');
+const path = require('path');
+const EE = require('events').EventEmitter;
+
+const extend = require('extend');
+const resolve = require('resolve');
+const flaggedRespawn = require('flagged-respawn');
+const isPlainObject = require('lodash.isplainobject');
+const mapValues = require('lodash.mapvalues');
+const fined = require('fined');
+
+const findCwd = require('./lib/find_cwd');
+const findConfig = require('./lib/find_config');
+const fileSearch = require('./lib/file_search');
+const parseOptions = require('./lib/parse_options');
+const silentRequire = require('./lib/silent_require');
+const buildConfigName = require('./lib/build_config_name');
+const registerLoader = require('./lib/register_loader');
+
+
+function Liftoff (opts) {
+ EE.call(this);
+ extend(this, parseOptions(opts));
+}
+util.inherits(Liftoff, EE);
+
+Liftoff.prototype.requireLocal = function (module, basedir) {
+ try {
+ var result = require(resolve.sync(module, {basedir: basedir}));
+ this.emit('require', module, result);
+ return result;
+ } catch (e) {
+ this.emit('requireFail', module, e);
+ }
+};
+
+Liftoff.prototype.buildEnvironment = function (opts) {
+ opts = opts || {};
+
+ // get modules we want to preload
+ var preload = opts.require || [];
+
+ // ensure items to preload is an array
+ if (!Array.isArray(preload)) {
+ preload = [preload];
+ }
+
+ // make a copy of search paths that can be mutated for this run
+ var searchPaths = this.searchPaths.slice();
+
+ // calculate current cwd
+ var cwd = findCwd(opts);
+
+ // if cwd was provided explicitly, only use it for searching config
+ if (opts.cwd) {
+ searchPaths = [cwd];
+ } else {
+ // otherwise just search in cwd first
+ searchPaths.unshift(cwd);
+ }
+
+ // calculate the regex to use for finding the config file
+ var configNameSearch = buildConfigName({
+ configName: this.configName,
+ extensions: Object.keys(this.extensions)
+ });
+
+ // calculate configPath
+ var configPath = findConfig({
+ configNameSearch: configNameSearch,
+ searchPaths: searchPaths,
+ configPath: opts.configPath
+ });
+
+ // if we have a config path, save the directory it resides in.
+ var configBase;
+ if (configPath) {
+ configBase = path.dirname(configPath);
+ // if cwd wasn't provided explicitly, it should match configBase
+ if (!opts.cwd) {
+ cwd = configBase;
+ }
+ // resolve symlink if needed
+ if (fs.lstatSync(configPath).isSymbolicLink()) {
+ configPath = fs.realpathSync(configPath);
+ }
+ }
+
+ // TODO: break this out into lib/
+ // locate local module and package next to config or explicitly provided cwd
+ var modulePath, modulePackage;
+ try {
+ var delim = (process.platform === 'win32' ? ';' : ':'),
+ paths = (process.env.NODE_PATH ? process.env.NODE_PATH.split(delim) : []);
+ modulePath = resolve.sync(this.moduleName, {basedir: configBase || cwd, paths: paths});
+ modulePackage = silentRequire(fileSearch('package.json', [modulePath]));
+ } catch (e) {}
+
+ // if we have a configuration but we failed to find a local module, maybe
+ // we are developing against ourselves?
+ if (!modulePath && configPath) {
+ // check the package.json sibling to our config to see if its `name`
+ // matches the module we're looking for
+ var modulePackagePath = fileSearch('package.json', [configBase]);
+ modulePackage = silentRequire(modulePackagePath);
+ if (modulePackage && modulePackage.name === this.moduleName) {
+ // if it does, our module path is `main` inside package.json
+ modulePath = path.join(path.dirname(modulePackagePath), modulePackage.main || 'index.js');
+ cwd = configBase;
+ } else {
+ // clear if we just required a package for some other project
+ modulePackage = {};
+ }
+ }
+
+ // load any modules which were requested to be required
+ if (preload.length) {
+ // unique results first
+ preload.filter(function (value, index, self) {
+ return self.indexOf(value) === index;
+ }).forEach(function (dep) {
+ this.requireLocal(dep, findCwd(opts));
+ }, this);
+ }
+
+ var exts = this.extensions;
+ var eventEmitter = this;
+ registerLoader(eventEmitter, exts, configPath, cwd);
+
+ var configFiles = {};
+ if (isPlainObject(this.configFiles)) {
+ var notfound = { path: null };
+ configFiles = mapValues(this.configFiles, function(prop, name) {
+ var defaultObj = { name: name, cwd: cwd, extensions: exts };
+ return mapValues(prop, function(pathObj) {
+ var found = fined(pathObj, defaultObj) || notfound;
+ if (isPlainObject(found.extension)) {
+ registerLoader(eventEmitter, found.extension, found.path, cwd);
+ }
+ return found.path;
+ });
+ });
+ }
+
+ return {
+ cwd: cwd,
+ require: preload,
+ configNameSearch: configNameSearch,
+ configPath: configPath,
+ configBase: configBase,
+ modulePath: modulePath,
+ modulePackage: modulePackage || {},
+ configFiles: configFiles
+ };
+};
+
+Liftoff.prototype.handleFlags = function (cb) {
+ if (typeof this.v8flags === 'function') {
+ this.v8flags(function (err, flags) {
+ if (err) {
+ cb(err);
+ } else {
+ cb(null, flags);
+ }
+ });
+ } else {
+ process.nextTick(function () {
+ cb(null, this.v8flags);
+ }.bind(this));
+ }
+};
+
+Liftoff.prototype.launch = function (opts, fn) {
+ if (typeof fn !== 'function') {
+ throw new Error('You must provide a callback function.');
+ }
+ process.title = this.processTitle;
+
+ var completion = opts.completion;
+ if (completion && this.completions) {
+ return this.completions(completion);
+ }
+
+ this.handleFlags(function (err, flags) {
+ if (err) {
+ throw err;
+ } else {
+ if (flags) {
+ flaggedRespawn(flags, process.argv, function (ready, child) {
+ if (child !== process) {
+ this.emit('respawn', process.argv.filter(function (arg) {
+ var flag = arg.split('=')[0];
+ return flags.indexOf(flag) !== -1;
+ }.bind(this)), child);
+ }
+ if (ready) {
+ fn.call(this, this.buildEnvironment(opts));
+ }
+ }.bind(this));
+ } else {
+ fn.call(this, this.buildEnvironment(opts));
+ }
+ }
+ }.bind(this));
+};
+
+
+
+module.exports = Liftoff;
diff --git a/node_modules/liftoff/lib/build_config_name.js b/node_modules/liftoff/lib/build_config_name.js
new file mode 100644
index 0000000..b83e185
--- /dev/null
+++ b/node_modules/liftoff/lib/build_config_name.js
@@ -0,0 +1,17 @@
+module.exports = function (opts) {
+ opts = opts || {};
+ var configName = opts.configName;
+ var extensions = opts.extensions;
+ if (!configName) {
+ throw new Error('Please specify a configName.');
+ }
+ if (configName instanceof RegExp) {
+ return [configName];
+ }
+ if (!Array.isArray(extensions)) {
+ throw new Error('Please provide an array of valid extensions.');
+ }
+ return extensions.map(function (ext) {
+ return configName + ext;
+ });
+};
diff --git a/node_modules/liftoff/lib/file_search.js b/node_modules/liftoff/lib/file_search.js
new file mode 100644
index 0000000..76dadd6
--- /dev/null
+++ b/node_modules/liftoff/lib/file_search.js
@@ -0,0 +1,14 @@
+const findup = require('findup-sync');
+
+module.exports = function (search, paths) {
+ var path;
+ var len = paths.length;
+ for (var i = 0; i < len; i++) {
+ if (path) {
+ break;
+ } else {
+ path = findup(search, {cwd: paths[i], nocase: true});
+ }
+ }
+ return path;
+};
diff --git a/node_modules/liftoff/lib/find_config.js b/node_modules/liftoff/lib/find_config.js
new file mode 100644
index 0000000..71c3f07
--- /dev/null
+++ b/node_modules/liftoff/lib/find_config.js
@@ -0,0 +1,25 @@
+const fs = require('fs');
+const path = require('path');
+const fileSearch = require('./file_search');
+
+module.exports = function (opts) {
+ opts = opts || {};
+ var configNameSearch = opts.configNameSearch;
+ var configPath = opts.configPath;
+ var searchPaths = opts.searchPaths;
+ // only search for a config if a path to one wasn't explicitly provided
+ if (!configPath) {
+ if (!Array.isArray(searchPaths)) {
+ throw new Error('Please provide an array of paths to search for config in.');
+ }
+ if (!configNameSearch) {
+ throw new Error('Please provide a configNameSearch.');
+ }
+ configPath = fileSearch(configNameSearch, searchPaths);
+ }
+ // confirm the configPath exists and return an absolute path to it
+ if (fs.existsSync(configPath)) {
+ return path.resolve(configPath);
+ }
+ return null;
+};
diff --git a/node_modules/liftoff/lib/find_cwd.js b/node_modules/liftoff/lib/find_cwd.js
new file mode 100644
index 0000000..2a029b9
--- /dev/null
+++ b/node_modules/liftoff/lib/find_cwd.js
@@ -0,0 +1,18 @@
+const path = require('path');
+
+module.exports = function (opts) {
+ if (!opts) {
+ opts = {};
+ }
+ var cwd = opts.cwd;
+ var configPath = opts.configPath;
+ // if a path to the desired config was specified
+ // but no cwd was provided, use configPath dir
+ if (typeof configPath === 'string' && !cwd) {
+ cwd = path.dirname(path.resolve(configPath));
+ }
+ if (typeof cwd === 'string') {
+ return path.resolve(cwd);
+ }
+ return process.cwd();
+};
diff --git a/node_modules/liftoff/lib/parse_options.js b/node_modules/liftoff/lib/parse_options.js
new file mode 100644
index 0000000..ab416b5
--- /dev/null
+++ b/node_modules/liftoff/lib/parse_options.js
@@ -0,0 +1,35 @@
+const extend = require('extend');
+
+module.exports = function (opts) {
+ var defaults = {
+ extensions: {
+ '.js': null,
+ '.json': null
+ },
+ searchPaths: []
+ };
+ if (!opts) {
+ opts = {};
+ }
+ if (opts.name) {
+ if (!opts.processTitle) {
+ opts.processTitle = opts.name;
+ }
+ if (!opts.configName) {
+ opts.configName = opts.name + 'file';
+ }
+ if (!opts.moduleName) {
+ opts.moduleName = opts.name;
+ }
+ }
+ if (!opts.processTitle) {
+ throw new Error('You must specify a processTitle.');
+ }
+ if (!opts.configName) {
+ throw new Error('You must specify a configName.');
+ }
+ if (!opts.moduleName) {
+ throw new Error('You must specify a moduleName.');
+ }
+ return extend(defaults, opts);
+};
diff --git a/node_modules/liftoff/lib/register_loader.js b/node_modules/liftoff/lib/register_loader.js
new file mode 100644
index 0000000..2b5f4cb
--- /dev/null
+++ b/node_modules/liftoff/lib/register_loader.js
@@ -0,0 +1,25 @@
+const rechoir = require('rechoir');
+const isString = require('lodash.isstring');
+
+module.exports = function(eventEmitter, extensions, configPath, cwd) {
+ extensions = extensions || {};
+
+ if (!isString(configPath)) {
+ return;
+ }
+
+ var autoloads = rechoir.prepare(extensions, configPath, cwd, true);
+ if (autoloads instanceof Error) {
+ autoloads = autoloads.failures;
+ }
+
+ if (Array.isArray(autoloads)) {
+ autoloads.forEach(function (attempt) {
+ if (attempt.error) {
+ eventEmitter.emit('requireFail', attempt.moduleName, attempt.error);
+ } else {
+ eventEmitter.emit('require', attempt.moduleName, attempt.module);
+ }
+ });
+ }
+};
diff --git a/node_modules/liftoff/lib/silent_require.js b/node_modules/liftoff/lib/silent_require.js
new file mode 100644
index 0000000..7b4dfe4
--- /dev/null
+++ b/node_modules/liftoff/lib/silent_require.js
@@ -0,0 +1,5 @@
+module.exports = function (path) {
+ try {
+ return require(path);
+ } catch (e) {}
+};
diff --git a/node_modules/liftoff/package.json b/node_modules/liftoff/package.json
new file mode 100644
index 0000000..d4e44a5
--- /dev/null
+++ b/node_modules/liftoff/package.json
@@ -0,0 +1,120 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "liftoff@^2.1.0",
+ "scope": null,
+ "escapedName": "liftoff",
+ "name": "liftoff",
+ "rawSpec": "^2.1.0",
+ "spec": ">=2.1.0 <3.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp"
+ ]
+ ],
+ "_from": "liftoff@>=2.1.0 <3.0.0",
+ "_id": "liftoff@2.3.0",
+ "_inCache": true,
+ "_location": "/liftoff",
+ "_nodeVersion": "0.10.41",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/liftoff-2.3.0.tgz_1469646196567_0.8871160212438554"
+ },
+ "_npmUser": {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ },
+ "_npmVersion": "2.15.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "liftoff@^2.1.0",
+ "scope": null,
+ "escapedName": "liftoff",
+ "name": "liftoff",
+ "rawSpec": "^2.1.0",
+ "spec": ">=2.1.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/gulp"
+ ],
+ "_resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz",
+ "_shasum": "a98f2ff67183d8ba7cfaca10548bd7ff0550b385",
+ "_shrinkwrap": null,
+ "_spec": "liftoff@^2.1.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp",
+ "author": {
+ "name": "Tyler Kellen",
+ "url": "http://goingslowly.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/js-cli/js-liftoff/issues"
+ },
+ "dependencies": {
+ "extend": "^3.0.0",
+ "findup-sync": "^0.4.2",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^0.3.2",
+ "lodash.isplainobject": "^4.0.4",
+ "lodash.isstring": "^4.0.1",
+ "lodash.mapvalues": "^4.4.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "description": "Launch your command line tool with ease.",
+ "devDependencies": {
+ "chai": "^3.5.0",
+ "coffee-script": "^1.10.0",
+ "istanbul": "^0.4.3",
+ "jscs": "^2.11.0",
+ "jshint": "^2.9.2",
+ "mocha": "^2.4.5",
+ "sinon": "~1.17.4"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "a98f2ff67183d8ba7cfaca10548bd7ff0550b385",
+ "tarball": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "gitHead": "be40ec3a3fa5854b4ab496a97f3d5877bf747b0b",
+ "homepage": "https://github.com/js-cli/js-liftoff",
+ "keywords": [
+ "command line"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ },
+ {
+ "name": "tkellen",
+ "email": "tyler@sleekcode.net"
+ },
+ {
+ "name": "tusbar",
+ "email": "bertrand.marron@gmail.com"
+ }
+ ],
+ "name": "liftoff",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/js-cli/js-liftoff.git"
+ },
+ "scripts": {
+ "test": "jshint lib index.js && jscs lib index.js && mocha -t 5000 -b -R spec test/index"
+ },
+ "version": "2.3.0"
+}
diff --git a/node_modules/load-json-file/index.js b/node_modules/load-json-file/index.js
new file mode 100644
index 0000000..96d4d9f
--- /dev/null
+++ b/node_modules/load-json-file/index.js
@@ -0,0 +1,21 @@
+'use strict';
+var path = require('path');
+var fs = require('graceful-fs');
+var stripBom = require('strip-bom');
+var parseJson = require('parse-json');
+var Promise = require('pinkie-promise');
+var pify = require('pify');
+
+function parse(x, fp) {
+ return parseJson(stripBom(x), path.relative(process.cwd(), fp));
+}
+
+module.exports = function (fp) {
+ return pify(fs.readFile, Promise)(fp, 'utf8').then(function (data) {
+ return parse(data, fp);
+ });
+};
+
+module.exports.sync = function (fp) {
+ return parse(fs.readFileSync(fp, 'utf8'), fp);
+};
diff --git a/node_modules/load-json-file/license b/node_modules/load-json-file/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/load-json-file/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/load-json-file/node_modules/strip-bom/index.js b/node_modules/load-json-file/node_modules/strip-bom/index.js
new file mode 100644
index 0000000..5695c5c
--- /dev/null
+++ b/node_modules/load-json-file/node_modules/strip-bom/index.js
@@ -0,0 +1,17 @@
+'use strict';
+var isUtf8 = require('is-utf8');
+
+module.exports = function (x) {
+ // Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
+ // conversion translates it to FEFF (UTF-16 BOM)
+ if (typeof x === 'string' && x.charCodeAt(0) === 0xFEFF) {
+ return x.slice(1);
+ }
+
+ if (Buffer.isBuffer(x) && isUtf8(x) &&
+ x[0] === 0xEF && x[1] === 0xBB && x[2] === 0xBF) {
+ return x.slice(3);
+ }
+
+ return x;
+};
diff --git a/node_modules/load-json-file/node_modules/strip-bom/license b/node_modules/load-json-file/node_modules/strip-bom/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/load-json-file/node_modules/strip-bom/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/load-json-file/node_modules/strip-bom/package.json b/node_modules/load-json-file/node_modules/strip-bom/package.json
new file mode 100644
index 0000000..d95d1c4
--- /dev/null
+++ b/node_modules/load-json-file/node_modules/strip-bom/package.json
@@ -0,0 +1,105 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "strip-bom@^2.0.0",
+ "scope": null,
+ "escapedName": "strip-bom",
+ "name": "strip-bom",
+ "rawSpec": "^2.0.0",
+ "spec": ">=2.0.0 <3.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/load-json-file"
+ ]
+ ],
+ "_from": "strip-bom@>=2.0.0 <3.0.0",
+ "_id": "strip-bom@2.0.0",
+ "_inCache": true,
+ "_location": "/load-json-file/strip-bom",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.11.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "strip-bom@^2.0.0",
+ "scope": null,
+ "escapedName": "strip-bom",
+ "name": "strip-bom",
+ "rawSpec": "^2.0.0",
+ "spec": ">=2.0.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/load-json-file"
+ ],
+ "_resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "_shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e",
+ "_shrinkwrap": null,
+ "_spec": "strip-bom@^2.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/load-json-file",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/strip-bom/issues"
+ },
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "description": "Strip UTF-8 byte order mark (BOM) from a string/buffer",
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "6219a85616520491f35788bdbf1447a99c7e6b0e",
+ "tarball": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "851b9c126dba9561cc14ef3dc2634dcc11df4d11",
+ "homepage": "https://github.com/sindresorhus/strip-bom",
+ "keywords": [
+ "bom",
+ "strip",
+ "byte",
+ "mark",
+ "unicode",
+ "utf8",
+ "utf-8",
+ "remove",
+ "delete",
+ "trim",
+ "text",
+ "buffer",
+ "string"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "strip-bom",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/strip-bom.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "2.0.0"
+}
diff --git a/node_modules/load-json-file/node_modules/strip-bom/readme.md b/node_modules/load-json-file/node_modules/strip-bom/readme.md
new file mode 100644
index 0000000..8ecf258
--- /dev/null
+++ b/node_modules/load-json-file/node_modules/strip-bom/readme.md
@@ -0,0 +1,39 @@
+# strip-bom [](https://travis-ci.org/sindresorhus/strip-bom)
+
+> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string/buffer
+
+From Wikipedia:
+
+> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8.
+
+
+## Install
+
+```
+$ npm install --save strip-bom
+```
+
+
+## Usage
+
+```js
+var fs = require('fs');
+var stripBom = require('strip-bom');
+
+stripBom('\uFEFFunicorn');
+//=> 'unicorn'
+
+stripBom(fs.readFileSync('unicorn.txt'));
+//=> 'unicorn'
+```
+
+
+## Related
+
+- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module
+- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/load-json-file/package.json b/node_modules/load-json-file/package.json
new file mode 100644
index 0000000..0996bc8
--- /dev/null
+++ b/node_modules/load-json-file/package.json
@@ -0,0 +1,111 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "load-json-file@^1.0.0",
+ "scope": null,
+ "escapedName": "load-json-file",
+ "name": "load-json-file",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/read-pkg"
+ ]
+ ],
+ "_from": "load-json-file@>=1.0.0 <2.0.0",
+ "_id": "load-json-file@1.1.0",
+ "_inCache": true,
+ "_location": "/load-json-file",
+ "_nodeVersion": "4.2.1",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.14.7",
+ "_phantomChildren": {
+ "is-utf8": "0.2.1"
+ },
+ "_requested": {
+ "raw": "load-json-file@^1.0.0",
+ "scope": null,
+ "escapedName": "load-json-file",
+ "name": "load-json-file",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/read-pkg"
+ ],
+ "_resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "_shasum": "956905708d58b4bab4c2261b04f59f31c99374c0",
+ "_shrinkwrap": null,
+ "_spec": "load-json-file@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/read-pkg",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/load-json-file/issues"
+ },
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "description": "Read and parse a JSON file",
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "956905708d58b4bab4c2261b04f59f31c99374c0",
+ "tarball": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "115157a417380d3160da418d4ff25bb33b0051eb",
+ "homepage": "https://github.com/sindresorhus/load-json-file",
+ "keywords": [
+ "json",
+ "read",
+ "parse",
+ "file",
+ "fs",
+ "graceful",
+ "load"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "load-json-file",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/load-json-file.git"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "version": "1.1.0",
+ "xo": {
+ "ignores": [
+ "test.js"
+ ]
+ }
+}
diff --git a/node_modules/load-json-file/readme.md b/node_modules/load-json-file/readme.md
new file mode 100644
index 0000000..fa982b5
--- /dev/null
+++ b/node_modules/load-json-file/readme.md
@@ -0,0 +1,45 @@
+# load-json-file [](https://travis-ci.org/sindresorhus/load-json-file)
+
+> Read and parse a JSON file
+
+[Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom), uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs), and throws more [helpful JSON errors](https://github.com/sindresorhus/parse-json).
+
+
+## Install
+
+```
+$ npm install --save load-json-file
+```
+
+
+## Usage
+
+```js
+const loadJsonFile = require('load-json-file');
+
+loadJsonFile('foo.json').then(json => {
+ console.log(json);
+ //=> {foo: true}
+});
+```
+
+
+## API
+
+### loadJsonFile(filepath)
+
+Returns a promise that resolves to the parsed JSON.
+
+### loadJsonFile.sync(filepath)
+
+Returns the parsed JSON.
+
+
+## Related
+
+- [write-json-file](https://github.com/sindresorhus/write-json-file) - Stringify and write JSON to a file atomically
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/lodash._basecopy/LICENSE.txt b/node_modules/lodash._basecopy/LICENSE.txt
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash._basecopy/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._basecopy/README.md b/node_modules/lodash._basecopy/README.md
new file mode 100644
index 0000000..acdfa29
--- /dev/null
+++ b/node_modules/lodash._basecopy/README.md
@@ -0,0 +1,20 @@
+# lodash._basecopy v3.0.1
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._basecopy
+```
+
+In Node.js/io.js:
+
+```js
+var baseCopy = require('lodash._basecopy');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._basecopy) for more details.
diff --git a/node_modules/lodash._basecopy/index.js b/node_modules/lodash._basecopy/index.js
new file mode 100644
index 0000000..b586d31
--- /dev/null
+++ b/node_modules/lodash._basecopy/index.js
@@ -0,0 +1,32 @@
+/**
+ * lodash 3.0.1 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */
+function baseCopy(source, props, object) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+ object[key] = source[key];
+ }
+ return object;
+}
+
+module.exports = baseCopy;
diff --git a/node_modules/lodash._basecopy/package.json b/node_modules/lodash._basecopy/package.json
new file mode 100644
index 0000000..6e905ce
--- /dev/null
+++ b/node_modules/lodash._basecopy/package.json
@@ -0,0 +1,123 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._basecopy@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basecopy",
+ "name": "lodash._basecopy",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash._basecopy@>=3.0.0 <4.0.0",
+ "_id": "lodash._basecopy@3.0.1",
+ "_inCache": true,
+ "_location": "/lodash._basecopy",
+ "_nodeVersion": "0.12.2",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.7.6",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._basecopy@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basecopy",
+ "name": "lodash._basecopy",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "_shasum": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36",
+ "_shrinkwrap": null,
+ "_spec": "lodash._basecopy@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `baseCopy` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36",
+ "tarball": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._basecopy",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.1"
+}
diff --git a/node_modules/lodash._basetostring/LICENSE b/node_modules/lodash._basetostring/LICENSE
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash._basetostring/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._basetostring/README.md b/node_modules/lodash._basetostring/README.md
new file mode 100644
index 0000000..f81145e
--- /dev/null
+++ b/node_modules/lodash._basetostring/README.md
@@ -0,0 +1,20 @@
+# lodash._basetostring v3.0.1
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseToString` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._basetostring
+```
+
+In Node.js/io.js:
+
+```js
+var baseToString = require('lodash._basetostring');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._basetostring) for more details.
diff --git a/node_modules/lodash._basetostring/index.js b/node_modules/lodash._basetostring/index.js
new file mode 100644
index 0000000..db8ecc9
--- /dev/null
+++ b/node_modules/lodash._basetostring/index.js
@@ -0,0 +1,22 @@
+/**
+ * lodash 3.0.1 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` or `undefined` values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ return value == null ? '' : (value + '');
+}
+
+module.exports = baseToString;
diff --git a/node_modules/lodash._basetostring/package.json b/node_modules/lodash._basetostring/package.json
new file mode 100644
index 0000000..7f85269
--- /dev/null
+++ b/node_modules/lodash._basetostring/package.json
@@ -0,0 +1,123 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._basetostring@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basetostring",
+ "name": "lodash._basetostring",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash._basetostring@>=3.0.0 <4.0.0",
+ "_id": "lodash._basetostring@3.0.1",
+ "_inCache": true,
+ "_location": "/lodash._basetostring",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.12.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._basetostring@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basetostring",
+ "name": "lodash._basetostring",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "_shasum": "d1861d877f824a52f669832dcaf3ee15566a07d5",
+ "_shrinkwrap": null,
+ "_spec": "lodash._basetostring@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `baseToString` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d1861d877f824a52f669832dcaf3ee15566a07d5",
+ "tarball": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._basetostring",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.1"
+}
diff --git a/node_modules/lodash._basevalues/LICENSE.txt b/node_modules/lodash._basevalues/LICENSE.txt
new file mode 100644
index 0000000..1776432
--- /dev/null
+++ b/node_modules/lodash._basevalues/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._basevalues/README.md b/node_modules/lodash._basevalues/README.md
new file mode 100644
index 0000000..206ba71
--- /dev/null
+++ b/node_modules/lodash._basevalues/README.md
@@ -0,0 +1,20 @@
+# lodash._basevalues v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseValues` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._basevalues
+```
+
+In Node.js/io.js:
+
+```js
+var baseValues = require('lodash._basevalues');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._basevalues) for more details.
diff --git a/node_modules/lodash._basevalues/index.js b/node_modules/lodash._basevalues/index.js
new file mode 100644
index 0000000..28c8215
--- /dev/null
+++ b/node_modules/lodash._basevalues/index.js
@@ -0,0 +1,31 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/**
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
+ * array of `object` property values corresponding to the property names
+ * returned by `keysFunc`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the array of property values.
+ */
+function baseValues(object, props) {
+ var index = -1,
+ length = props.length,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = object[props[index]];
+ }
+ return result;
+}
+
+module.exports = baseValues;
diff --git a/node_modules/lodash._basevalues/package.json b/node_modules/lodash._basevalues/package.json
new file mode 100644
index 0000000..0140173
--- /dev/null
+++ b/node_modules/lodash._basevalues/package.json
@@ -0,0 +1,107 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._basevalues@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basevalues",
+ "name": "lodash._basevalues",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash._basevalues@>=3.0.0 <4.0.0",
+ "_id": "lodash._basevalues@3.0.0",
+ "_inCache": true,
+ "_location": "/lodash._basevalues",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._basevalues@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._basevalues",
+ "name": "lodash._basevalues",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "_shasum": "5b775762802bde3d3297503e26300820fdf661b7",
+ "_shrinkwrap": null,
+ "_spec": "lodash._basevalues@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `baseValues` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "5b775762802bde3d3297503e26300820fdf661b7",
+ "tarball": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._basevalues",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.0"
+}
diff --git a/node_modules/lodash._getnative/LICENSE b/node_modules/lodash._getnative/LICENSE
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash._getnative/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._getnative/README.md b/node_modules/lodash._getnative/README.md
new file mode 100644
index 0000000..7835cec
--- /dev/null
+++ b/node_modules/lodash._getnative/README.md
@@ -0,0 +1,20 @@
+# lodash._getnative v3.9.1
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `getNative` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._getnative
+```
+
+In Node.js/io.js:
+
+```js
+var getNative = require('lodash._getnative');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.9.1-npm-packages/lodash._getnative) for more details.
diff --git a/node_modules/lodash._getnative/index.js b/node_modules/lodash._getnative/index.js
new file mode 100644
index 0000000..a32063d
--- /dev/null
+++ b/node_modules/lodash._getnative/index.js
@@ -0,0 +1,137 @@
+/**
+ * lodash 3.9.1 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]';
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 equivalents which return 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+}
+
+module.exports = getNative;
diff --git a/node_modules/lodash._getnative/package.json b/node_modules/lodash._getnative/package.json
new file mode 100644
index 0000000..558736a
--- /dev/null
+++ b/node_modules/lodash._getnative/package.json
@@ -0,0 +1,119 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._getnative@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._getnative",
+ "name": "lodash._getnative",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys"
+ ]
+ ],
+ "_from": "lodash._getnative@>=3.0.0 <4.0.0",
+ "_id": "lodash._getnative@3.9.1",
+ "_inCache": true,
+ "_location": "/lodash._getnative",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.12.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._getnative@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._getnative",
+ "name": "lodash._getnative",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.keys"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "_shasum": "570bc7dede46d61cdcde687d65d3eecbaa3aaff5",
+ "_shrinkwrap": null,
+ "_spec": "lodash._getnative@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `getNative` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "570bc7dede46d61cdcde687d65d3eecbaa3aaff5",
+ "tarball": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._getnative",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.9.1"
+}
diff --git a/node_modules/lodash._isiterateecall/LICENSE.txt b/node_modules/lodash._isiterateecall/LICENSE.txt
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash._isiterateecall/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._isiterateecall/README.md b/node_modules/lodash._isiterateecall/README.md
new file mode 100644
index 0000000..0c5c701
--- /dev/null
+++ b/node_modules/lodash._isiterateecall/README.md
@@ -0,0 +1,20 @@
+# lodash._isiterateecall v3.0.9
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `isIterateeCall` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._isiterateecall
+```
+
+In Node.js/io.js:
+
+```js
+var isIterateeCall = require('lodash._isiterateecall');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.9-npm-packages/lodash._isiterateecall) for more details.
diff --git a/node_modules/lodash._isiterateecall/index.js b/node_modules/lodash._isiterateecall/index.js
new file mode 100644
index 0000000..ea3761b
--- /dev/null
+++ b/node_modules/lodash._isiterateecall/index.js
@@ -0,0 +1,132 @@
+/**
+ * lodash 3.0.9 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/**
+ * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+}
+
+/**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */
+function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)) {
+ var other = object[index];
+ return value === value ? (value === other) : (other !== other);
+ }
+ return false;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = isIterateeCall;
diff --git a/node_modules/lodash._isiterateecall/package.json b/node_modules/lodash._isiterateecall/package.json
new file mode 100644
index 0000000..5a026a6
--- /dev/null
+++ b/node_modules/lodash._isiterateecall/package.json
@@ -0,0 +1,123 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._isiterateecall@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._isiterateecall",
+ "name": "lodash._isiterateecall",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash._isiterateecall@>=3.0.0 <4.0.0",
+ "_id": "lodash._isiterateecall@3.0.9",
+ "_inCache": true,
+ "_location": "/lodash._isiterateecall",
+ "_nodeVersion": "2.0.2",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.10.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._isiterateecall@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._isiterateecall",
+ "name": "lodash._isiterateecall",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "_shasum": "5203ad7ba425fae842460e696db9cf3e6aac057c",
+ "_shrinkwrap": null,
+ "_spec": "lodash._isiterateecall@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `isIterateeCall` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "5203ad7ba425fae842460e696db9cf3e6aac057c",
+ "tarball": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._isiterateecall",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.9"
+}
diff --git a/node_modules/lodash._reescape/LICENSE.txt b/node_modules/lodash._reescape/LICENSE.txt
new file mode 100644
index 0000000..1776432
--- /dev/null
+++ b/node_modules/lodash._reescape/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._reescape/README.md b/node_modules/lodash._reescape/README.md
new file mode 100644
index 0000000..c80ae07
--- /dev/null
+++ b/node_modules/lodash._reescape/README.md
@@ -0,0 +1,20 @@
+# lodash._reescape v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `reEscape` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._reescape
+```
+
+In Node.js/io.js:
+
+```js
+var reEscape = require('lodash._reescape');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._reescape) for more details.
diff --git a/node_modules/lodash._reescape/index.js b/node_modules/lodash._reescape/index.js
new file mode 100644
index 0000000..1a3b8cf
--- /dev/null
+++ b/node_modules/lodash._reescape/index.js
@@ -0,0 +1,13 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to match template delimiters. */
+var reEscape = /<%-([\s\S]+?)%>/g;
+
+module.exports = reEscape;
diff --git a/node_modules/lodash._reescape/package.json b/node_modules/lodash._reescape/package.json
new file mode 100644
index 0000000..9d58c34
--- /dev/null
+++ b/node_modules/lodash._reescape/package.json
@@ -0,0 +1,107 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._reescape@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reescape",
+ "name": "lodash._reescape",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util"
+ ]
+ ],
+ "_from": "lodash._reescape@>=3.0.0 <4.0.0",
+ "_id": "lodash._reescape@3.0.0",
+ "_inCache": true,
+ "_location": "/lodash._reescape",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._reescape@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reescape",
+ "name": "lodash._reescape",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/gulp-util"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "_shasum": "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a",
+ "_shrinkwrap": null,
+ "_spec": "lodash._reescape@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `reEscape` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a",
+ "tarball": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._reescape",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.0"
+}
diff --git a/node_modules/lodash._reevaluate/LICENSE.txt b/node_modules/lodash._reevaluate/LICENSE.txt
new file mode 100644
index 0000000..1776432
--- /dev/null
+++ b/node_modules/lodash._reevaluate/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._reevaluate/README.md b/node_modules/lodash._reevaluate/README.md
new file mode 100644
index 0000000..a69b8aa
--- /dev/null
+++ b/node_modules/lodash._reevaluate/README.md
@@ -0,0 +1,20 @@
+# lodash._reevaluate v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `reEvaluate` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._reevaluate
+```
+
+In Node.js/io.js:
+
+```js
+var reEvaluate = require('lodash._reevaluate');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._reevaluate) for more details.
diff --git a/node_modules/lodash._reevaluate/index.js b/node_modules/lodash._reevaluate/index.js
new file mode 100644
index 0000000..16d7609
--- /dev/null
+++ b/node_modules/lodash._reevaluate/index.js
@@ -0,0 +1,13 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to match template delimiters. */
+var reEvaluate = /<%([\s\S]+?)%>/g;
+
+module.exports = reEvaluate;
diff --git a/node_modules/lodash._reevaluate/package.json b/node_modules/lodash._reevaluate/package.json
new file mode 100644
index 0000000..b2c8280
--- /dev/null
+++ b/node_modules/lodash._reevaluate/package.json
@@ -0,0 +1,107 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._reevaluate@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reevaluate",
+ "name": "lodash._reevaluate",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util"
+ ]
+ ],
+ "_from": "lodash._reevaluate@>=3.0.0 <4.0.0",
+ "_id": "lodash._reevaluate@3.0.0",
+ "_inCache": true,
+ "_location": "/lodash._reevaluate",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._reevaluate@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reevaluate",
+ "name": "lodash._reevaluate",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/gulp-util"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "_shasum": "58bc74c40664953ae0b124d806996daca431e2ed",
+ "_shrinkwrap": null,
+ "_spec": "lodash._reevaluate@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `reEvaluate` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "58bc74c40664953ae0b124d806996daca431e2ed",
+ "tarball": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ }
+ ],
+ "name": "lodash._reevaluate",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.0"
+}
diff --git a/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/lodash._reinterpolate/LICENSE.txt
new file mode 100644
index 0000000..1776432
--- /dev/null
+++ b/node_modules/lodash._reinterpolate/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._reinterpolate/README.md b/node_modules/lodash._reinterpolate/README.md
new file mode 100644
index 0000000..1423e50
--- /dev/null
+++ b/node_modules/lodash._reinterpolate/README.md
@@ -0,0 +1,20 @@
+# lodash._reinterpolate v3.0.0
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `reInterpolate` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._reinterpolate
+```
+
+In Node.js/io.js:
+
+```js
+var reInterpolate = require('lodash._reinterpolate');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._reinterpolate) for more details.
diff --git a/node_modules/lodash._reinterpolate/index.js b/node_modules/lodash._reinterpolate/index.js
new file mode 100644
index 0000000..5c06abc
--- /dev/null
+++ b/node_modules/lodash._reinterpolate/index.js
@@ -0,0 +1,13 @@
+/**
+ * lodash 3.0.0 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.7.0
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to match template delimiters. */
+var reInterpolate = /<%=([\s\S]+?)%>/g;
+
+module.exports = reInterpolate;
diff --git a/node_modules/lodash._reinterpolate/package.json b/node_modules/lodash._reinterpolate/package.json
new file mode 100644
index 0000000..15f6a0a
--- /dev/null
+++ b/node_modules/lodash._reinterpolate/package.json
@@ -0,0 +1,121 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._reinterpolate@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reinterpolate",
+ "name": "lodash._reinterpolate",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util"
+ ]
+ ],
+ "_from": "lodash._reinterpolate@>=3.0.0 <4.0.0",
+ "_id": "lodash._reinterpolate@3.0.0",
+ "_inCache": true,
+ "_location": "/lodash._reinterpolate",
+ "_nodeVersion": "0.10.35",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._reinterpolate@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._reinterpolate",
+ "name": "lodash._reinterpolate",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/gulp-util",
+ "/lodash.template",
+ "/lodash.templatesettings"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "_shasum": "0ccf2d89166af03b3663c796538b75ac6e114d9d",
+ "_shrinkwrap": null,
+ "_spec": "lodash._reinterpolate@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s internal `reInterpolate` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "0ccf2d89166af03b3663c796538b75ac6e114d9d",
+ "tarball": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash._reinterpolate",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.0"
+}
diff --git a/node_modules/lodash._root/LICENSE b/node_modules/lodash._root/LICENSE
new file mode 100644
index 0000000..bcbe13d
--- /dev/null
+++ b/node_modules/lodash._root/LICENSE
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash._root/README.md b/node_modules/lodash._root/README.md
new file mode 100644
index 0000000..0329abf
--- /dev/null
+++ b/node_modules/lodash._root/README.md
@@ -0,0 +1,18 @@
+# lodash._root v3.0.1
+
+The internal [lodash](https://lodash.com/) function `root` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash._root
+```
+
+In Node.js:
+```js
+var root = require('lodash._root');
+```
+
+See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._root) for more details.
diff --git a/node_modules/lodash._root/index.js b/node_modules/lodash._root/index.js
new file mode 100644
index 0000000..2d8ba0a
--- /dev/null
+++ b/node_modules/lodash._root/index.js
@@ -0,0 +1,59 @@
+/**
+ * lodash 3.0.1 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used to determine if values are of the language type `Object`. */
+var objectTypes = {
+ 'function': true,
+ 'object': true
+};
+
+/** Detect free variable `exports`. */
+var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)
+ ? exports
+ : undefined;
+
+/** Detect free variable `module`. */
+var freeModule = (objectTypes[typeof module] && module && !module.nodeType)
+ ? module
+ : undefined;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);
+
+/** Detect free variable `self`. */
+var freeSelf = checkGlobal(objectTypes[typeof self] && self);
+
+/** Detect free variable `window`. */
+var freeWindow = checkGlobal(objectTypes[typeof window] && window);
+
+/** Detect `this` as the global object. */
+var thisGlobal = checkGlobal(objectTypes[typeof this] && this);
+
+/**
+ * Used as a reference to the global object.
+ *
+ * The `this` value is used if it's the global object to avoid Greasemonkey's
+ * restricted `window` object, otherwise the `window` object is used.
+ */
+var root = freeGlobal ||
+ ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||
+ freeSelf || thisGlobal || Function('return this')();
+
+/**
+ * Checks if `value` is a global object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {null|Object} Returns `value` if it's a global object, else `null`.
+ */
+function checkGlobal(value) {
+ return (value && value.Object === Object) ? value : null;
+}
+
+module.exports = root;
diff --git a/node_modules/lodash._root/package.json b/node_modules/lodash._root/package.json
new file mode 100644
index 0000000..2e6b10b
--- /dev/null
+++ b/node_modules/lodash._root/package.json
@@ -0,0 +1,109 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash._root@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._root",
+ "name": "lodash._root",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.escape"
+ ]
+ ],
+ "_from": "lodash._root@>=3.0.0 <4.0.0",
+ "_id": "lodash._root@3.0.1",
+ "_inCache": true,
+ "_location": "/lodash._root",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-6-west.internal.npmjs.com",
+ "tmp": "tmp/lodash._root-3.0.1.tgz_1455615057559_0.24128212919458747"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.14.18",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash._root@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash._root",
+ "name": "lodash._root",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.escape"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "_shasum": "fba1c4524c19ee9a5f8136b4609f017cf4ded692",
+ "_shrinkwrap": null,
+ "_spec": "lodash._root@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.escape",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The internal lodash function `root` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "fba1c4524c19ee9a5f8136b4609f017cf4ded692",
+ "tarball": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash._root",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.1"
+}
diff --git a/node_modules/lodash.assignwith/LICENSE b/node_modules/lodash.assignwith/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.assignwith/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.assignwith/README.md b/node_modules/lodash.assignwith/README.md
new file mode 100644
index 0000000..026191e
--- /dev/null
+++ b/node_modules/lodash.assignwith/README.md
@@ -0,0 +1,18 @@
+# lodash.assignwith v4.2.0
+
+The [lodash](https://lodash.com/) method `_.assignWith` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.assignwith
+```
+
+In Node.js:
+```js
+var assignWith = require('lodash.assignwith');
+```
+
+See the [documentation](https://lodash.com/docs#assignWith) or [package source](https://github.com/lodash/lodash/blob/4.2.0-npm-packages/lodash.assignwith) for more details.
diff --git a/node_modules/lodash.assignwith/index.js b/node_modules/lodash.assignwith/index.js
new file mode 100644
index 0000000..921dfce
--- /dev/null
+++ b/node_modules/lodash.assignwith/index.js
@@ -0,0 +1,622 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+/**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = overArg(Object.keys, Object),
+ nativeMax = Math.max;
+
+/**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+function arrayLikeKeys(value, inherited) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
+ var result = (isArray(value) || isArguments(value))
+ ? baseTimes(value.length, String)
+ : [];
+
+ var length = result.length,
+ skipIndexes = !!length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = value;
+ }
+}
+
+/**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ */
+function baseRest(func, start) {
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ index = -1;
+ var otherArgs = Array(start + 1);
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = array;
+ return apply(func, this, otherArgs);
+ };
+}
+
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+function copyObject(source, props, object, customizer) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+
+ var newValue = customizer
+ ? customizer(object[key], source[key], key, object, source)
+ : undefined;
+
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
+ }
+ return object;
+}
+
+/**
+ * Creates a function like `_.assign`.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */
+function createAssigner(assigner) {
+ return baseRest(function(object, sources) {
+ var index = -1,
+ length = sources.length,
+ customizer = length > 1 ? sources[length - 1] : undefined,
+ guard = length > 2 ? sources[2] : undefined;
+
+ customizer = (assigner.length > 3 && typeof customizer == 'function')
+ ? (length--, customizer)
+ : undefined;
+
+ if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+ customizer = length < 3 ? undefined : customizer;
+ length = 1;
+ }
+ object = Object(object);
+ while (++index < length) {
+ var source = sources[index];
+ if (source) {
+ assigner(object, source, index, customizer);
+ }
+ }
+ return object;
+ });
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length &&
+ (typeof value == 'number' || reIsUint.test(value)) &&
+ (value > -1 && value % 1 == 0 && value < length);
+}
+
+/**
+ * Checks if the given arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
+ * else `false`.
+ */
+function isIterateeCall(value, index, object) {
+ if (!isObject(object)) {
+ return false;
+ }
+ var type = typeof index;
+ if (type == 'number'
+ ? (isArrayLike(object) && isIndex(index, object.length))
+ : (type == 'string' && index in object)
+ ) {
+ return eq(object[index], value);
+ }
+ return false;
+}
+
+/**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+}
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * This method is like `_.assign` except that it accepts `customizer`
+ * which is invoked to produce the assigned values. If `customizer` returns
+ * `undefined`, assignment is handled by the method instead. The `customizer`
+ * is invoked with five arguments: (objValue, srcValue, key, object, source).
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} sources The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ * @see _.assignInWith
+ * @example
+ *
+ * function customizer(objValue, srcValue) {
+ * return _.isUndefined(objValue) ? srcValue : objValue;
+ * }
+ *
+ * var defaults = _.partialRight(_.assignWith, customizer);
+ *
+ * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
+ * // => { 'a': 1, 'b': 2 }
+ */
+var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
+ copyObject(source, keys(source), object, customizer);
+});
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+}
+
+module.exports = assignWith;
diff --git a/node_modules/lodash.assignwith/package.json b/node_modules/lodash.assignwith/package.json
new file mode 100644
index 0000000..d2b0a16
--- /dev/null
+++ b/node_modules/lodash.assignwith/package.json
@@ -0,0 +1,113 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.assignwith@^4.0.7",
+ "scope": null,
+ "escapedName": "lodash.assignwith",
+ "name": "lodash.assignwith",
+ "rawSpec": "^4.0.7",
+ "spec": ">=4.0.7 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined"
+ ]
+ ],
+ "_from": "lodash.assignwith@>=4.0.7 <5.0.0",
+ "_id": "lodash.assignwith@4.2.0",
+ "_inCache": true,
+ "_location": "/lodash.assignwith",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/lodash.assignwith-4.2.0.tgz_1471109805358_0.5188975257333368"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.assignwith@^4.0.7",
+ "scope": null,
+ "escapedName": "lodash.assignwith",
+ "name": "lodash.assignwith",
+ "rawSpec": "^4.0.7",
+ "spec": ">=4.0.7 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fined"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz",
+ "_shasum": "127a97f02adc41751a954d24b0de17e100e038eb",
+ "_shrinkwrap": null,
+ "_spec": "lodash.assignwith@^4.0.7",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.assignWith` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "127a97f02adc41751a954d24b0de17e100e038eb",
+ "tarball": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "assignwith"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine.bublitz@gmail.com"
+ }
+ ],
+ "name": "lodash.assignwith",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.2.0"
+}
diff --git a/node_modules/lodash.escape/LICENSE b/node_modules/lodash.escape/LICENSE
new file mode 100644
index 0000000..b054ca5
--- /dev/null
+++ b/node_modules/lodash.escape/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.escape/README.md b/node_modules/lodash.escape/README.md
new file mode 100644
index 0000000..b012def
--- /dev/null
+++ b/node_modules/lodash.escape/README.md
@@ -0,0 +1,18 @@
+# lodash.escape v3.2.0
+
+The [lodash](https://lodash.com/) method `_.escape` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.escape
+```
+
+In Node.js:
+```js
+var escape = require('lodash.escape');
+```
+
+See the [documentation](https://lodash.com/docs#escape) or [package source](https://github.com/lodash/lodash/blob/3.2.0-npm-packages/lodash.escape) for more details.
diff --git a/node_modules/lodash.escape/index.js b/node_modules/lodash.escape/index.js
new file mode 100644
index 0000000..0971ae8
--- /dev/null
+++ b/node_modules/lodash.escape/index.js
@@ -0,0 +1,180 @@
+/**
+ * lodash 3.2.0 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var root = require('lodash._root');
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0;
+
+/** `Object#toString` result references. */
+var symbolTag = '[object Symbol]';
+
+/** Used to match HTML entities and HTML characters. */
+var reUnescapedHtml = /[&<>"'`]/g,
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+
+/** Used to map characters to HTML entities. */
+var htmlEscapes = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '`': '`'
+};
+
+/**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+function escapeHtmlChar(chr) {
+ return htmlEscapes[chr];
+}
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var Symbol = root.Symbol;
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolToString = Symbol ? symbolProto.toString : undefined;
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (value == null) {
+ return '';
+ }
+ if (isSymbol(value)) {
+ return Symbol ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to
+ * their corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional
+ * characters use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value.
+ * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * Backticks are escaped because in IE < 9, they can break out of
+ * attribute values or HTML comments. See [#59](https://html5sec.org/#59),
+ * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
+ * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
+ * for more details.
+ *
+ * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
+ * to reduce XSS vectors.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, & pebbles'
+ */
+function escape(string) {
+ string = toString(string);
+ return (string && reHasUnescapedHtml.test(string))
+ ? string.replace(reUnescapedHtml, escapeHtmlChar)
+ : string;
+}
+
+module.exports = escape;
diff --git a/node_modules/lodash.escape/package.json b/node_modules/lodash.escape/package.json
new file mode 100644
index 0000000..dd588d8
--- /dev/null
+++ b/node_modules/lodash.escape/package.json
@@ -0,0 +1,116 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.escape@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.escape",
+ "name": "lodash.escape",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash.escape@>=3.0.0 <4.0.0",
+ "_id": "lodash.escape@3.2.0",
+ "_inCache": true,
+ "_location": "/lodash.escape",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-9-west.internal.npmjs.com",
+ "tmp": "tmp/lodash.escape-3.2.0.tgz_1454898355271_0.9197692747693509"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.14.18",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.escape@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.escape",
+ "name": "lodash.escape",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template",
+ "/lodash.templatesettings"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "_shasum": "995ee0dc18c1b48cc92effae71a10aab5b487698",
+ "_shrinkwrap": null,
+ "_spec": "lodash.escape@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._root": "^3.0.0"
+ },
+ "description": "The lodash method `_.escape` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "995ee0dc18c1b48cc92effae71a10aab5b487698",
+ "tarball": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "escape"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.escape",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.2.0"
+}
diff --git a/node_modules/lodash.isarguments/LICENSE b/node_modules/lodash.isarguments/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.isarguments/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.isarguments/README.md b/node_modules/lodash.isarguments/README.md
new file mode 100644
index 0000000..eb95fe1
--- /dev/null
+++ b/node_modules/lodash.isarguments/README.md
@@ -0,0 +1,18 @@
+# lodash.isarguments v3.1.0
+
+The [lodash](https://lodash.com/) method `_.isArguments` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.isarguments
+```
+
+In Node.js:
+```js
+var isArguments = require('lodash.isarguments');
+```
+
+See the [documentation](https://lodash.com/docs#isArguments) or [package source](https://github.com/lodash/lodash/blob/3.1.0-npm-packages/lodash.isarguments) for more details.
diff --git a/node_modules/lodash.isarguments/index.js b/node_modules/lodash.isarguments/index.js
new file mode 100644
index 0000000..042dac5
--- /dev/null
+++ b/node_modules/lodash.isarguments/index.js
@@ -0,0 +1,229 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+module.exports = isArguments;
diff --git a/node_modules/lodash.isarguments/package.json b/node_modules/lodash.isarguments/package.json
new file mode 100644
index 0000000..6bb34c5
--- /dev/null
+++ b/node_modules/lodash.isarguments/package.json
@@ -0,0 +1,113 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.isarguments@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.isarguments",
+ "name": "lodash.isarguments",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys"
+ ]
+ ],
+ "_from": "lodash.isarguments@>=3.0.0 <4.0.0",
+ "_id": "lodash.isarguments@3.1.0",
+ "_inCache": true,
+ "_location": "/lodash.isarguments",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/lodash.isarguments-3.1.0.tgz_1471110006733_0.7392017105594277"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.isarguments@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.isarguments",
+ "name": "lodash.isarguments",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.keys"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "_shasum": "2f573d85c6a24289ff00663b491c1d338ff3458a",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isarguments@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.isArguments` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "2f573d85c6a24289ff00663b491c1d338ff3458a",
+ "tarball": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "isarguments"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isarguments",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.1.0"
+}
diff --git a/node_modules/lodash.isarray/LICENSE b/node_modules/lodash.isarray/LICENSE
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash.isarray/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.isarray/README.md b/node_modules/lodash.isarray/README.md
new file mode 100644
index 0000000..ea274aa
--- /dev/null
+++ b/node_modules/lodash.isarray/README.md
@@ -0,0 +1,20 @@
+# lodash.isarray v3.0.4
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.isarray
+```
+
+In Node.js/io.js:
+
+```js
+var isArray = require('lodash.isarray');
+```
+
+See the [documentation](https://lodash.com/docs#isArray) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarray) for more details.
diff --git a/node_modules/lodash.isarray/index.js b/node_modules/lodash.isarray/index.js
new file mode 100644
index 0000000..dd24658
--- /dev/null
+++ b/node_modules/lodash.isarray/index.js
@@ -0,0 +1,180 @@
+/**
+ * lodash 3.0.4 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** `Object#toString` result references. */
+var arrayTag = '[object Array]',
+ funcTag = '[object Function]';
+
+/** Used to detect host constructors (Safari > 5). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var fnToString = Function.prototype.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeIsArray = getNative(Array, 'isArray');
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = object == null ? undefined : object[key];
+ return isNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */
+var isArray = nativeIsArray || function(value) {
+ return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+};
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in older versions of Chrome and Safari which return 'function' for regexes
+ // and Safari 8 equivalents which return 'object' for typed array constructors.
+ return isObject(value) && objToString.call(value) == funcTag;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */
+function isNative(value) {
+ if (value == null) {
+ return false;
+ }
+ if (isFunction(value)) {
+ return reIsNative.test(fnToString.call(value));
+ }
+ return isObjectLike(value) && reIsHostCtor.test(value);
+}
+
+module.exports = isArray;
diff --git a/node_modules/lodash.isarray/package.json b/node_modules/lodash.isarray/package.json
new file mode 100644
index 0000000..1d2eb38
--- /dev/null
+++ b/node_modules/lodash.isarray/package.json
@@ -0,0 +1,129 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.isarray@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.isarray",
+ "name": "lodash.isarray",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys"
+ ]
+ ],
+ "_from": "lodash.isarray@>=3.0.0 <4.0.0",
+ "_id": "lodash.isarray@3.0.4",
+ "_inCache": true,
+ "_location": "/lodash.isarray",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.12.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.isarray@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.isarray",
+ "name": "lodash.isarray",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.keys"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "_shasum": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isarray@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.keys",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s `_.isArray` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55",
+ "tarball": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ }
+ ],
+ "name": "lodash.isarray",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.0.4"
+}
diff --git a/node_modules/lodash.isempty/LICENSE b/node_modules/lodash.isempty/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.isempty/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.isempty/README.md b/node_modules/lodash.isempty/README.md
new file mode 100644
index 0000000..b514bae
--- /dev/null
+++ b/node_modules/lodash.isempty/README.md
@@ -0,0 +1,18 @@
+# lodash.isempty v4.4.0
+
+The [lodash](https://lodash.com/) method `_.isEmpty` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.isempty
+```
+
+In Node.js:
+```js
+var isEmpty = require('lodash.isempty');
+```
+
+See the [documentation](https://lodash.com/docs#isEmpty) or [package source](https://github.com/lodash/lodash/blob/4.4.0-npm-packages/lodash.isempty) for more details.
diff --git a/node_modules/lodash.isempty/index.js b/node_modules/lodash.isempty/index.js
new file mode 100644
index 0000000..6fb4aff
--- /dev/null
+++ b/node_modules/lodash.isempty/index.js
@@ -0,0 +1,582 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as references for various `Number` constants. */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ setTag = '[object Set]',
+ weakMapTag = '[object WeakMap]';
+
+var dataViewTag = '[object DataView]';
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/** Detect free variable `exports`. */
+var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/** Used for built-in method references. */
+var funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var Buffer = moduleExports ? root.Buffer : undefined,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
+ nativeKeys = overArg(Object.keys, Object);
+
+/* Built-in method references that are verified to be native. */
+var DataView = getNative(root, 'DataView'),
+ Map = getNative(root, 'Map'),
+ Promise = getNative(root, 'Promise'),
+ Set = getNative(root, 'Set'),
+ WeakMap = getNative(root, 'WeakMap');
+
+/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */
+var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');
+
+/** Used to detect maps, sets, and weakmaps. */
+var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+/**
+ * The base implementation of `getTag`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+ return objectToString.call(value);
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+var getTag = baseGetTag;
+
+// Fallback for data views, maps, sets, and weak maps in IE 11,
+// for data views in Edge < 14, and promises in Node.js.
+if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : undefined;
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+var isBuffer = nativeIsBuffer || stubFalse;
+
+/**
+ * Checks if `value` is an empty object, collection, map, or set.
+ *
+ * Objects are considered empty if they have no own enumerable string keyed
+ * properties.
+ *
+ * Array-like values such as `arguments` objects, arrays, buffers, strings, or
+ * jQuery-like collections are considered empty if they have a `length` of `0`.
+ * Similarly, maps and sets are considered empty if they have a `size` of `0`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */
+function isEmpty(value) {
+ if (isArrayLike(value) &&
+ (isArray(value) || typeof value == 'string' ||
+ typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {
+ return !value.length;
+ }
+ var tag = getTag(value);
+ if (tag == mapTag || tag == setTag) {
+ return !value.size;
+ }
+ if (nonEnumShadows || isPrototype(value)) {
+ return !nativeKeys(value).length;
+ }
+ for (var key in value) {
+ if (hasOwnProperty.call(value, key)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * This method returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {boolean} Returns `false`.
+ * @example
+ *
+ * _.times(2, _.stubFalse);
+ * // => [false, false]
+ */
+function stubFalse() {
+ return false;
+}
+
+module.exports = isEmpty;
diff --git a/node_modules/lodash.isempty/package.json b/node_modules/lodash.isempty/package.json
new file mode 100644
index 0000000..116d7f1
--- /dev/null
+++ b/node_modules/lodash.isempty/package.json
@@ -0,0 +1,113 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.isempty@^4.2.1",
+ "scope": null,
+ "escapedName": "lodash.isempty",
+ "name": "lodash.isempty",
+ "rawSpec": "^4.2.1",
+ "spec": ">=4.2.1 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined"
+ ]
+ ],
+ "_from": "lodash.isempty@>=4.2.1 <5.0.0",
+ "_id": "lodash.isempty@4.4.0",
+ "_inCache": true,
+ "_location": "/lodash.isempty",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/lodash.isempty-4.4.0.tgz_1471110024771_0.43532854481600225"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.isempty@^4.2.1",
+ "scope": null,
+ "escapedName": "lodash.isempty",
+ "name": "lodash.isempty",
+ "rawSpec": "^4.2.1",
+ "spec": ">=4.2.1 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fined"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
+ "_shasum": "6f86cbedd8be4ec987be9aaf33c9684db1b31e7e",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isempty@^4.2.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.isEmpty` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "6f86cbedd8be4ec987be9aaf33c9684db1b31e7e",
+ "tarball": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "isempty"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isempty",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.4.0"
+}
diff --git a/node_modules/lodash.isplainobject/LICENSE b/node_modules/lodash.isplainobject/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.isplainobject/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.isplainobject/README.md b/node_modules/lodash.isplainobject/README.md
new file mode 100644
index 0000000..aeefd74
--- /dev/null
+++ b/node_modules/lodash.isplainobject/README.md
@@ -0,0 +1,18 @@
+# lodash.isplainobject v4.0.6
+
+The [lodash](https://lodash.com/) method `_.isPlainObject` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.isplainobject
+```
+
+In Node.js:
+```js
+var isPlainObject = require('lodash.isplainobject');
+```
+
+See the [documentation](https://lodash.com/docs#isPlainObject) or [package source](https://github.com/lodash/lodash/blob/4.0.6-npm-packages/lodash.isplainobject) for more details.
diff --git a/node_modules/lodash.isplainobject/index.js b/node_modules/lodash.isplainobject/index.js
new file mode 100644
index 0000000..0f820ee
--- /dev/null
+++ b/node_modules/lodash.isplainobject/index.js
@@ -0,0 +1,139 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** `Object#toString` result references. */
+var objectTag = '[object Object]';
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/** Used for built-in method references. */
+var funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/** Used to infer the `Object` constructor. */
+var objectCtorString = funcToString.call(Object);
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var getPrototype = overArg(Object.getPrototypeOf, Object);
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.8.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */
+function isPlainObject(value) {
+ if (!isObjectLike(value) ||
+ objectToString.call(value) != objectTag || isHostObject(value)) {
+ return false;
+ }
+ var proto = getPrototype(value);
+ if (proto === null) {
+ return true;
+ }
+ var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
+ return (typeof Ctor == 'function' &&
+ Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);
+}
+
+module.exports = isPlainObject;
diff --git a/node_modules/lodash.isplainobject/package.json b/node_modules/lodash.isplainobject/package.json
new file mode 100644
index 0000000..d963482
--- /dev/null
+++ b/node_modules/lodash.isplainobject/package.json
@@ -0,0 +1,114 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.isplainobject@^4.0.4",
+ "scope": null,
+ "escapedName": "lodash.isplainobject",
+ "name": "lodash.isplainobject",
+ "rawSpec": "^4.0.4",
+ "spec": ">=4.0.4 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff"
+ ]
+ ],
+ "_from": "lodash.isplainobject@>=4.0.4 <5.0.0",
+ "_id": "lodash.isplainobject@4.0.6",
+ "_inCache": true,
+ "_location": "/lodash.isplainobject",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/lodash.isplainobject-4.0.6.tgz_1471110064885_0.12097060843370855"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.isplainobject@^4.0.4",
+ "scope": null,
+ "escapedName": "lodash.isplainobject",
+ "name": "lodash.isplainobject",
+ "rawSpec": "^4.0.4",
+ "spec": ">=4.0.4 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fined",
+ "/liftoff"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "_shasum": "7c526a52d89b45c45cc690b88163be0497f550cb",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isplainobject@^4.0.4",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.isPlainObject` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "7c526a52d89b45c45cc690b88163be0497f550cb",
+ "tarball": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "isplainobject"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isplainobject",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.6"
+}
diff --git a/node_modules/lodash.isstring/LICENSE b/node_modules/lodash.isstring/LICENSE
new file mode 100644
index 0000000..b054ca5
--- /dev/null
+++ b/node_modules/lodash.isstring/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2016 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.isstring/README.md b/node_modules/lodash.isstring/README.md
new file mode 100644
index 0000000..f184029
--- /dev/null
+++ b/node_modules/lodash.isstring/README.md
@@ -0,0 +1,18 @@
+# lodash.isstring v4.0.1
+
+The [lodash](https://lodash.com/) method `_.isString` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.isstring
+```
+
+In Node.js:
+```js
+var isString = require('lodash.isstring');
+```
+
+See the [documentation](https://lodash.com/docs#isString) or [package source](https://github.com/lodash/lodash/blob/4.0.1-npm-packages/lodash.isstring) for more details.
diff --git a/node_modules/lodash.isstring/index.js b/node_modules/lodash.isstring/index.js
new file mode 100644
index 0000000..408225c
--- /dev/null
+++ b/node_modules/lodash.isstring/index.js
@@ -0,0 +1,95 @@
+/**
+ * lodash 4.0.1 (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright 2012-2016 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** `Object#toString` result references. */
+var stringTag = '[object String]';
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @type Function
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */
+function isString(value) {
+ return typeof value == 'string' ||
+ (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);
+}
+
+module.exports = isString;
diff --git a/node_modules/lodash.isstring/package.json b/node_modules/lodash.isstring/package.json
new file mode 100644
index 0000000..7f353e1
--- /dev/null
+++ b/node_modules/lodash.isstring/package.json
@@ -0,0 +1,114 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.isstring@^4.0.1",
+ "scope": null,
+ "escapedName": "lodash.isstring",
+ "name": "lodash.isstring",
+ "rawSpec": "^4.0.1",
+ "spec": ">=4.0.1 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff"
+ ]
+ ],
+ "_from": "lodash.isstring@>=4.0.1 <5.0.0",
+ "_id": "lodash.isstring@4.0.1",
+ "_inCache": true,
+ "_location": "/lodash.isstring",
+ "_nodeVersion": "5.4.0",
+ "_npmOperationalInternal": {
+ "host": "packages-5-east.internal.npmjs.com",
+ "tmp": "tmp/lodash.isstring-4.0.1.tgz_1454484537621_0.8814679116476327"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.14.15",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.isstring@^4.0.1",
+ "scope": null,
+ "escapedName": "lodash.isstring",
+ "name": "lodash.isstring",
+ "rawSpec": "^4.0.1",
+ "spec": ">=4.0.1 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fined",
+ "/liftoff"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "_shasum": "d527dfb5456eca7cc9bb95d5daeaf88ba54a5451",
+ "_shrinkwrap": null,
+ "_spec": "lodash.isstring@^4.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.isString` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "d527dfb5456eca7cc9bb95d5daeaf88ba54a5451",
+ "tarball": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "isstring"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.isstring",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.0.1"
+}
diff --git a/node_modules/lodash.keys/LICENSE b/node_modules/lodash.keys/LICENSE
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash.keys/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.keys/README.md b/node_modules/lodash.keys/README.md
new file mode 100644
index 0000000..5f69a18
--- /dev/null
+++ b/node_modules/lodash.keys/README.md
@@ -0,0 +1,20 @@
+# lodash.keys v3.1.2
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.keys` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.keys
+```
+
+In Node.js/io.js:
+
+```js
+var keys = require('lodash.keys');
+```
+
+See the [documentation](https://lodash.com/docs#keys) or [package source](https://github.com/lodash/lodash/blob/3.1.2-npm-packages/lodash.keys) for more details.
diff --git a/node_modules/lodash.keys/index.js b/node_modules/lodash.keys/index.js
new file mode 100644
index 0000000..f4c1774
--- /dev/null
+++ b/node_modules/lodash.keys/index.js
@@ -0,0 +1,236 @@
+/**
+ * lodash 3.1.2 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var getNative = require('lodash._getnative'),
+ isArguments = require('lodash.isarguments'),
+ isArray = require('lodash.isarray');
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^\d+$/;
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeKeys = getNative(Object, 'keys');
+
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */
+var MAX_SAFE_INTEGER = 9007199254740991;
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */
+var getLength = baseProperty('length');
+
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */
+function isArrayLike(value) {
+ return value != null && isLength(getLength(value));
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return value > -1 && value % 1 == 0 && value < length;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */
+function isLength(value) {
+ return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function shimKeys(object) {
+ var props = keysIn(object),
+ propsLength = props.length,
+ length = propsLength && object.length;
+
+ var allowIndexes = !!length && isLength(length) &&
+ (isArray(object) || isArguments(object));
+
+ var index = -1,
+ result = [];
+
+ while (++index < propsLength) {
+ var key = props[index];
+ if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */
+function isObject(value) {
+ // Avoid a V8 JIT bug in Chrome 19-20.
+ // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+var keys = !nativeKeys ? shimKeys : function(object) {
+ var Ctor = object == null ? undefined : object.constructor;
+ if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+ (typeof object != 'function' && isArrayLike(object))) {
+ return shimKeys(object);
+ }
+ return isObject(object) ? nativeKeys(object) : [];
+};
+
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */
+function keysIn(object) {
+ if (object == null) {
+ return [];
+ }
+ if (!isObject(object)) {
+ object = Object(object);
+ }
+ var length = object.length;
+ length = (length && isLength(length) &&
+ (isArray(object) || isArguments(object)) && length) || 0;
+
+ var Ctor = object.constructor,
+ index = -1,
+ isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+ result = Array(length),
+ skipIndexes = length > 0;
+
+ while (++index < length) {
+ result[index] = (index + '');
+ }
+ for (var key in object) {
+ if (!(skipIndexes && isIndex(key, length)) &&
+ !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+module.exports = keys;
diff --git a/node_modules/lodash.keys/package.json b/node_modules/lodash.keys/package.json
new file mode 100644
index 0000000..42c8f71
--- /dev/null
+++ b/node_modules/lodash.keys/package.json
@@ -0,0 +1,133 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.keys@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.keys",
+ "name": "lodash.keys",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash.keys@>=3.0.0 <4.0.0",
+ "_id": "lodash.keys@3.1.2",
+ "_inCache": true,
+ "_location": "/lodash.keys",
+ "_nodeVersion": "0.12.5",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.12.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.keys@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.keys",
+ "name": "lodash.keys",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "_shasum": "4dbc0472b156be50a0b286855d1bd0b0c656098a",
+ "_shrinkwrap": null,
+ "_spec": "lodash.keys@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ },
+ "description": "The modern build of lodash’s `_.keys` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "4dbc0472b156be50a0b286855d1bd0b0c656098a",
+ "tarball": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ }
+ ],
+ "name": "lodash.keys",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.1.2"
+}
diff --git a/node_modules/lodash.mapvalues/LICENSE b/node_modules/lodash.mapvalues/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.mapvalues/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.mapvalues/README.md b/node_modules/lodash.mapvalues/README.md
new file mode 100644
index 0000000..32cb163
--- /dev/null
+++ b/node_modules/lodash.mapvalues/README.md
@@ -0,0 +1,18 @@
+# lodash.mapvalues v4.6.0
+
+The [lodash](https://lodash.com/) method `_.mapValues` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.mapvalues
+```
+
+In Node.js:
+```js
+var mapValues = require('lodash.mapvalues');
+```
+
+See the [documentation](https://lodash.com/docs#mapValues) or [package source](https://github.com/lodash/lodash/blob/4.6.0-npm-packages/lodash.mapvalues) for more details.
diff --git a/node_modules/lodash.mapvalues/index.js b/node_modules/lodash.mapvalues/index.js
new file mode 100644
index 0000000..b04812c
--- /dev/null
+++ b/node_modules/lodash.mapvalues/index.js
@@ -0,0 +1,2280 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the size to enable large array optimizations. */
+var LARGE_ARRAY_SIZE = 200;
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** Used to compose bitmasks for comparison styles. */
+var UNORDERED_COMPARE_FLAG = 1,
+ PARTIAL_COMPARE_FLAG = 2;
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+/** Used to match property names within property paths. */
+var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
+ reIsPlainProp = /^\w*$/,
+ reLeadingDot = /^\./,
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to match backslashes in property paths. */
+var reEscapeChar = /\\(\\)?/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Used to detect unsigned integer values. */
+var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+/** Used to identify `toStringTag` values of typed arrays. */
+var typedArrayTags = {};
+typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+typedArrayTags[uint32Tag] = true;
+typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
+typedArrayTags[errorTag] = typedArrayTags[funcTag] =
+typedArrayTags[mapTag] = typedArrayTags[numberTag] =
+typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
+typedArrayTags[setTag] = typedArrayTags[stringTag] =
+typedArrayTags[weakMapTag] = false;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/** Detect free variable `exports`. */
+var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
+
+/** Detect free variable `module`. */
+var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
+
+/** Detect the popular CommonJS extension `module.exports`. */
+var moduleExports = freeModule && freeModule.exports === freeExports;
+
+/** Detect free variable `process` from Node.js. */
+var freeProcess = moduleExports && freeGlobal.process;
+
+/** Used to access faster Node.js helpers. */
+var nodeUtil = (function() {
+ try {
+ return freeProcess && freeProcess.binding('util');
+ } catch (e) {}
+}());
+
+/* Node.js helper references. */
+var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
+
+/**
+ * A specialized version of `_.some` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */
+function arraySome(array, predicate) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ while (++index < length) {
+ if (predicate(array[index], index, array)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+function baseProperty(key) {
+ return function(object) {
+ return object == null ? undefined : object[key];
+ };
+}
+
+/**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.unary` without support for storing metadata.
+ *
+ * @private
+ * @param {Function} func The function to cap arguments for.
+ * @returns {Function} Returns the new capped function.
+ */
+function baseUnary(func) {
+ return function(value) {
+ return func(value);
+ };
+}
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+}
+
+/**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+}
+
+/**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var Symbol = root.Symbol,
+ Uint8Array = root.Uint8Array,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeKeys = overArg(Object.keys, Object);
+
+/* Built-in method references that are verified to be native. */
+var DataView = getNative(root, 'DataView'),
+ Map = getNative(root, 'Map'),
+ Promise = getNative(root, 'Promise'),
+ Set = getNative(root, 'Set'),
+ WeakMap = getNative(root, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+
+/** Used to detect maps, sets, and weakmaps. */
+var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+/** Used to convert symbols to primitives and strings. */
+var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ *
+ * Creates an array cache object to store unique values.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [values] The values to cache.
+ */
+function SetCache(values) {
+ var index = -1,
+ length = values ? values.length : 0;
+
+ this.__data__ = new MapCache;
+ while (++index < length) {
+ this.add(values[index]);
+ }
+}
+
+/**
+ * Adds `value` to the array cache.
+ *
+ * @private
+ * @name add
+ * @memberOf SetCache
+ * @alias push
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache instance.
+ */
+function setCacheAdd(value) {
+ this.__data__.set(value, HASH_UNDEFINED);
+ return this;
+}
+
+/**
+ * Checks if `value` is in the array cache.
+ *
+ * @private
+ * @name has
+ * @memberOf SetCache
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `true` if `value` is found, else `false`.
+ */
+function setCacheHas(value) {
+ return this.__data__.has(value);
+}
+
+// Add methods to `SetCache`.
+SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
+SetCache.prototype.has = setCacheHas;
+
+/**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Stack(entries) {
+ this.__data__ = new ListCache(entries);
+}
+
+/**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+function stackClear() {
+ this.__data__ = new ListCache;
+}
+
+/**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function stackDelete(key) {
+ return this.__data__['delete'](key);
+}
+
+/**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function stackGet(key) {
+ return this.__data__.get(key);
+}
+
+/**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function stackHas(key) {
+ return this.__data__.has(key);
+}
+
+/**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+function stackSet(key, value) {
+ var cache = this.__data__;
+ if (cache instanceof ListCache) {
+ var pairs = cache.__data__;
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ return this;
+ }
+ cache = this.__data__ = new MapCache(pairs);
+ }
+ cache.set(key, value);
+ return this;
+}
+
+// Add methods to `Stack`.
+Stack.prototype.clear = stackClear;
+Stack.prototype['delete'] = stackDelete;
+Stack.prototype.get = stackGet;
+Stack.prototype.has = stackHas;
+Stack.prototype.set = stackSet;
+
+/**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+function arrayLikeKeys(value, inherited) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
+ var result = (isArray(value) || isArguments(value))
+ ? baseTimes(value.length, String)
+ : [];
+
+ var length = result.length,
+ skipIndexes = !!length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * The base implementation of `baseForOwn` which iterates over `object`
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */
+var baseFor = createBaseFor();
+
+/**
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */
+function baseForOwn(object, iteratee) {
+ return object && baseFor(object, iteratee, keys);
+}
+
+/**
+ * The base implementation of `_.get` without support for default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @returns {*} Returns the resolved value.
+ */
+function baseGet(object, path) {
+ path = isKey(path, object) ? [path] : castPath(path);
+
+ var index = 0,
+ length = path.length;
+
+ while (object != null && index < length) {
+ object = object[toKey(path[index++])];
+ }
+ return (index && index == length) ? object : undefined;
+}
+
+/**
+ * The base implementation of `getTag`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+function baseGetTag(value) {
+ return objectToString.call(value);
+}
+
+/**
+ * The base implementation of `_.hasIn` without support for deep paths.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {Array|string} key The key to check.
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
+ */
+function baseHasIn(object, key) {
+ return object != null && key in Object(object);
+}
+
+/**
+ * The base implementation of `_.isEqual` which supports partial comparisons
+ * and tracks traversed objects.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {boolean} [bitmask] The bitmask of comparison flags.
+ * The bitmask may be composed of the following flags:
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */
+function baseIsEqual(value, other, customizer, bitmask, stack) {
+ if (value === other) {
+ return true;
+ }
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+ return value !== value && other !== other;
+ }
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
+}
+
+/**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
+ var objIsArr = isArray(object),
+ othIsArr = isArray(other),
+ objTag = arrayTag,
+ othTag = arrayTag;
+
+ if (!objIsArr) {
+ objTag = getTag(object);
+ objTag = objTag == argsTag ? objectTag : objTag;
+ }
+ if (!othIsArr) {
+ othTag = getTag(other);
+ othTag = othTag == argsTag ? objectTag : othTag;
+ }
+ var objIsObj = objTag == objectTag && !isHostObject(object),
+ othIsObj = othTag == objectTag && !isHostObject(other),
+ isSameTag = objTag == othTag;
+
+ if (isSameTag && !objIsObj) {
+ stack || (stack = new Stack);
+ return (objIsArr || isTypedArray(object))
+ ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
+ : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
+ }
+ if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+ if (objIsWrapped || othIsWrapped) {
+ var objUnwrapped = objIsWrapped ? object.value() : object,
+ othUnwrapped = othIsWrapped ? other.value() : other;
+
+ stack || (stack = new Stack);
+ return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
+ }
+ }
+ if (!isSameTag) {
+ return false;
+ }
+ stack || (stack = new Stack);
+ return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
+}
+
+/**
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Array} matchData The property names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparisons.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */
+function baseIsMatch(object, source, matchData, customizer) {
+ var index = matchData.length,
+ length = index,
+ noCustomizer = !customizer;
+
+ if (object == null) {
+ return !length;
+ }
+ object = Object(object);
+ while (index--) {
+ var data = matchData[index];
+ if ((noCustomizer && data[2])
+ ? data[1] !== object[data[0]]
+ : !(data[0] in object)
+ ) {
+ return false;
+ }
+ }
+ while (++index < length) {
+ data = matchData[index];
+ var key = data[0],
+ objValue = object[key],
+ srcValue = data[1];
+
+ if (noCustomizer && data[2]) {
+ if (objValue === undefined && !(key in object)) {
+ return false;
+ }
+ } else {
+ var stack = new Stack;
+ if (customizer) {
+ var result = customizer(objValue, srcValue, key, object, source, stack);
+ }
+ if (!(result === undefined
+ ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ : result
+ )) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ */
+function baseIsTypedArray(value) {
+ return isObjectLike(value) &&
+ isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
+}
+
+/**
+ * The base implementation of `_.iteratee`.
+ *
+ * @private
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
+ * @returns {Function} Returns the iteratee.
+ */
+function baseIteratee(value) {
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
+ if (typeof value == 'function') {
+ return value;
+ }
+ if (value == null) {
+ return identity;
+ }
+ if (typeof value == 'object') {
+ return isArray(value)
+ ? baseMatchesProperty(value[0], value[1])
+ : baseMatches(value);
+ }
+ return property(value);
+}
+
+/**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.matches` which doesn't clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function baseMatches(source) {
+ var matchData = getMatchData(source);
+ if (matchData.length == 1 && matchData[0][2]) {
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
+ }
+ return function(object) {
+ return object === source || baseIsMatch(object, source, matchData);
+ };
+}
+
+/**
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function baseMatchesProperty(path, srcValue) {
+ if (isKey(path) && isStrictComparable(srcValue)) {
+ return matchesStrictComparable(toKey(path), srcValue);
+ }
+ return function(object) {
+ var objValue = get(object, path);
+ return (objValue === undefined && objValue === srcValue)
+ ? hasIn(object, path)
+ : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
+ };
+}
+
+/**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ */
+function basePropertyDeep(path) {
+ return function(object) {
+ return baseGet(object, path);
+ };
+}
+
+/**
+ * The base implementation of `_.toString` which doesn't convert nullish
+ * values to empty strings.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */
+function baseToString(value) {
+ // Exit early for strings to avoid a performance hit in some environments.
+ if (typeof value == 'string') {
+ return value;
+ }
+ if (isSymbol(value)) {
+ return symbolToString ? symbolToString.call(value) : '';
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Casts `value` to a path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {Array} Returns the cast property path array.
+ */
+function castPath(value) {
+ return isArray(value) ? value : stringToPath(value);
+}
+
+/**
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */
+function createBaseFor(fromRight) {
+ return function(object, iteratee, keysFunc) {
+ var index = -1,
+ iterable = Object(object),
+ props = keysFunc(object),
+ length = props.length;
+
+ while (length--) {
+ var key = props[fromRight ? length : ++index];
+ if (iteratee(iterable[key], key, iterable) === false) {
+ break;
+ }
+ }
+ return object;
+ };
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */
+function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ arrLength = array.length,
+ othLength = other.length;
+
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(array);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var index = -1,
+ result = true,
+ seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
+
+ stack.set(array, other);
+ stack.set(other, array);
+
+ // Ignore non-index properties.
+ while (++index < arrLength) {
+ var arrValue = array[index],
+ othValue = other[index];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, arrValue, index, other, array, stack)
+ : customizer(arrValue, othValue, index, array, other, stack);
+ }
+ if (compared !== undefined) {
+ if (compared) {
+ continue;
+ }
+ result = false;
+ break;
+ }
+ // Recursively compare arrays (susceptible to call stack limits).
+ if (seen) {
+ if (!arraySome(other, function(othValue, othIndex) {
+ if (!seen.has(othIndex) &&
+ (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
+ return seen.add(othIndex);
+ }
+ })) {
+ result = false;
+ break;
+ }
+ } else if (!(
+ arrValue === othValue ||
+ equalFunc(arrValue, othValue, customizer, bitmask, stack)
+ )) {
+ result = false;
+ break;
+ }
+ }
+ stack['delete'](array);
+ stack['delete'](other);
+ return result;
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
+ switch (tag) {
+ case dataViewTag:
+ if ((object.byteLength != other.byteLength) ||
+ (object.byteOffset != other.byteOffset)) {
+ return false;
+ }
+ object = object.buffer;
+ other = other.buffer;
+
+ case arrayBufferTag:
+ if ((object.byteLength != other.byteLength) ||
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
+ return false;
+ }
+ return true;
+
+ case boolTag:
+ case dateTag:
+ case numberTag:
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
+ // Invalid dates are coerced to `NaN`.
+ return eq(+object, +other);
+
+ case errorTag:
+ return object.name == other.name && object.message == other.message;
+
+ case regexpTag:
+ case stringTag:
+ // Coerce regexes to strings and treat strings, primitives and objects,
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
+ // for more details.
+ return object == (other + '');
+
+ case mapTag:
+ var convert = mapToArray;
+
+ case setTag:
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ convert || (convert = setToArray);
+
+ if (object.size != other.size && !isPartial) {
+ return false;
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked) {
+ return stacked == other;
+ }
+ bitmask |= UNORDERED_COMPARE_FLAG;
+
+ // Recursively compare objects (susceptible to call stack limits).
+ stack.set(object, other);
+ var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
+ stack['delete'](object);
+ return result;
+
+ case symbolTag:
+ if (symbolValueOf) {
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
+ }
+ }
+ return false;
+}
+
+/**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} customizer The function to customize comparisons.
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
+ * for more details.
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */
+function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ objProps = keys(object),
+ objLength = objProps.length,
+ othProps = keys(other),
+ othLength = othProps.length;
+
+ if (objLength != othLength && !isPartial) {
+ return false;
+ }
+ var index = objLength;
+ while (index--) {
+ var key = objProps[index];
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
+ return false;
+ }
+ }
+ // Assume cyclic values are equal.
+ var stacked = stack.get(object);
+ if (stacked && stack.get(other)) {
+ return stacked == other;
+ }
+ var result = true;
+ stack.set(object, other);
+ stack.set(other, object);
+
+ var skipCtor = isPartial;
+ while (++index < objLength) {
+ key = objProps[index];
+ var objValue = object[key],
+ othValue = other[key];
+
+ if (customizer) {
+ var compared = isPartial
+ ? customizer(othValue, objValue, key, other, object, stack)
+ : customizer(objValue, othValue, key, object, other, stack);
+ }
+ // Recursively compare objects (susceptible to call stack limits).
+ if (!(compared === undefined
+ ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
+ : compared
+ )) {
+ result = false;
+ break;
+ }
+ skipCtor || (skipCtor = key == 'constructor');
+ }
+ if (result && !skipCtor) {
+ var objCtor = object.constructor,
+ othCtor = other.constructor;
+
+ // Non `Object` object instances with different constructors are not equal.
+ if (objCtor != othCtor &&
+ ('constructor' in object && 'constructor' in other) &&
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+ result = false;
+ }
+ }
+ stack['delete'](object);
+ stack['delete'](other);
+ return result;
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+}
+
+/**
+ * Gets the property names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */
+function getMatchData(object) {
+ var result = keys(object),
+ length = result.length;
+
+ while (length--) {
+ var key = result[length],
+ value = object[key];
+
+ result[length] = [key, value, isStrictComparable(value)];
+ }
+ return result;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+var getTag = baseGetTag;
+
+// Fallback for data views, maps, sets, and weak maps in IE 11,
+// for data views in Edge < 14, and promises in Node.js.
+if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : undefined;
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+}
+
+/**
+ * Checks if `path` exists on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @param {Function} hasFunc The function to check properties.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ */
+function hasPath(object, path, hasFunc) {
+ path = isKey(path, object) ? [path] : castPath(path);
+
+ var result,
+ index = -1,
+ length = path.length;
+
+ while (++index < length) {
+ var key = toKey(path[index]);
+ if (!(result = object != null && hasFunc(object, key))) {
+ break;
+ }
+ object = object[key];
+ }
+ if (result) {
+ return result;
+ }
+ var length = object ? object.length : 0;
+ return !!length && isLength(length) && isIndex(key, length) &&
+ (isArray(object) || isArguments(object));
+}
+
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+function isIndex(value, length) {
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length &&
+ (typeof value == 'number' || reIsUint.test(value)) &&
+ (value > -1 && value % 1 == 0 && value < length);
+}
+
+/**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */
+function isKey(value, object) {
+ if (isArray(value)) {
+ return false;
+ }
+ var type = typeof value;
+ if (type == 'number' || type == 'symbol' || type == 'boolean' ||
+ value == null || isSymbol(value)) {
+ return true;
+ }
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
+ (object != null && value in Object(object));
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+}
+
+/**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */
+function isStrictComparable(value) {
+ return value === value && !isObject(value);
+}
+
+/**
+ * A specialized version of `matchesProperty` for source values suitable
+ * for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new spec function.
+ */
+function matchesStrictComparable(key, srcValue) {
+ return function(object) {
+ if (object == null) {
+ return false;
+ }
+ return object[key] === srcValue &&
+ (srcValue !== undefined || (key in Object(object)));
+ };
+}
+
+/**
+ * Converts `string` to a property path array.
+ *
+ * @private
+ * @param {string} string The string to convert.
+ * @returns {Array} Returns the property path array.
+ */
+var stringToPath = memoize(function(string) {
+ string = toString(string);
+
+ var result = [];
+ if (reLeadingDot.test(string)) {
+ result.push('');
+ }
+ string.replace(rePropName, function(match, number, quote, string) {
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+ });
+ return result;
+});
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result);
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
+}
+
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */
+var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
+
+/**
+ * Converts `value` to a string. An empty string is returned for `null`
+ * and `undefined` values. The sign of `-0` is preserved.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ * @example
+ *
+ * _.toString(null);
+ * // => ''
+ *
+ * _.toString(-0);
+ * // => '-0'
+ *
+ * _.toString([1, 2, 3]);
+ * // => '1,2,3'
+ */
+function toString(value) {
+ return value == null ? '' : baseToString(value);
+}
+
+/**
+ * Gets the value at `path` of `object`. If the resolved value is
+ * `undefined`, the `defaultValue` is returned in its place.
+ *
+ * @static
+ * @memberOf _
+ * @since 3.7.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */
+function get(object, path, defaultValue) {
+ var result = object == null ? undefined : baseGet(object, path);
+ return result === undefined ? defaultValue : result;
+}
+
+/**
+ * Checks if `path` is a direct or inherited property of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
+ * @example
+ *
+ * var object = _.create({ 'a': _.create({ 'b': 2 }) });
+ *
+ * _.hasIn(object, 'a');
+ * // => true
+ *
+ * _.hasIn(object, 'a.b');
+ * // => true
+ *
+ * _.hasIn(object, ['a', 'b']);
+ * // => true
+ *
+ * _.hasIn(object, 'b');
+ * // => false
+ */
+function hasIn(object, path) {
+ return object != null && hasPath(object, path, baseHasIn);
+}
+
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+}
+
+/**
+ * Creates an object with the same keys as `object` and values generated
+ * by running each own enumerable string keyed property of `object` thru
+ * `iteratee`. The iteratee is invoked with three arguments:
+ * (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @returns {Object} Returns the new mapped object.
+ * @see _.mapKeys
+ * @example
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * _.mapValues(users, function(o) { return o.age; });
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ *
+ * // The `_.property` iteratee shorthand.
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */
+function mapValues(object, iteratee) {
+ var result = {};
+ iteratee = baseIteratee(iteratee, 3);
+
+ baseForOwn(object, function(value, key, object) {
+ result[key] = iteratee(value, key, object);
+ });
+ return result;
+}
+
+/**
+ * This method returns the first argument it receives.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Util
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ *
+ * console.log(_.identity(object) === object);
+ * // => true
+ */
+function identity(value) {
+ return value;
+}
+
+/**
+ * Creates a function that returns the value at `path` of a given object.
+ *
+ * @static
+ * @memberOf _
+ * @since 2.4.0
+ * @category Util
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new accessor function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': 2 } },
+ * { 'a': { 'b': 1 } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b'));
+ * // => [2, 1]
+ *
+ * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
+ * // => [1, 2]
+ */
+function property(path) {
+ return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
+}
+
+module.exports = mapValues;
diff --git a/node_modules/lodash.mapvalues/package.json b/node_modules/lodash.mapvalues/package.json
new file mode 100644
index 0000000..17e09b5
--- /dev/null
+++ b/node_modules/lodash.mapvalues/package.json
@@ -0,0 +1,113 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.mapvalues@^4.4.0",
+ "scope": null,
+ "escapedName": "lodash.mapvalues",
+ "name": "lodash.mapvalues",
+ "rawSpec": "^4.4.0",
+ "spec": ">=4.4.0 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff"
+ ]
+ ],
+ "_from": "lodash.mapvalues@>=4.4.0 <5.0.0",
+ "_id": "lodash.mapvalues@4.6.0",
+ "_inCache": true,
+ "_location": "/lodash.mapvalues",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/lodash.mapvalues-4.6.0.tgz_1471110117308_0.16050698678009212"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.mapvalues@^4.4.0",
+ "scope": null,
+ "escapedName": "lodash.mapvalues",
+ "name": "lodash.mapvalues",
+ "rawSpec": "^4.4.0",
+ "spec": ">=4.4.0 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/liftoff"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
+ "_shasum": "1bafa5005de9dd6f4f26668c30ca37230cc9689c",
+ "_shrinkwrap": null,
+ "_spec": "lodash.mapvalues@^4.4.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.mapValues` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "1bafa5005de9dd6f4f26668c30ca37230cc9689c",
+ "tarball": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "mapvalues"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.mapvalues",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.6.0"
+}
diff --git a/node_modules/lodash.pick/LICENSE b/node_modules/lodash.pick/LICENSE
new file mode 100644
index 0000000..e0c69d5
--- /dev/null
+++ b/node_modules/lodash.pick/LICENSE
@@ -0,0 +1,47 @@
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+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.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
diff --git a/node_modules/lodash.pick/README.md b/node_modules/lodash.pick/README.md
new file mode 100644
index 0000000..587595d
--- /dev/null
+++ b/node_modules/lodash.pick/README.md
@@ -0,0 +1,18 @@
+# lodash.pick v4.4.0
+
+The [lodash](https://lodash.com/) method `_.pick` exported as a [Node.js](https://nodejs.org/) module.
+
+## Installation
+
+Using npm:
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.pick
+```
+
+In Node.js:
+```js
+var pick = require('lodash.pick');
+```
+
+See the [documentation](https://lodash.com/docs#pick) or [package source](https://github.com/lodash/lodash/blob/4.4.0-npm-packages/lodash.pick) for more details.
diff --git a/node_modules/lodash.pick/index.js b/node_modules/lodash.pick/index.js
new file mode 100644
index 0000000..aeeb775
--- /dev/null
+++ b/node_modules/lodash.pick/index.js
@@ -0,0 +1,503 @@
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as references for various `Number` constants. */
+var INFINITY = 1 / 0,
+ MAX_SAFE_INTEGER = 9007199254740991;
+
+/** `Object#toString` result references. */
+var argsTag = '[object Arguments]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ symbolTag = '[object Symbol]';
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * A faster alternative to `Function#apply`, this function invokes `func`
+ * with the `this` binding of `thisArg` and the arguments of `args`.
+ *
+ * @private
+ * @param {Function} func The function to invoke.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} args The arguments to invoke `func` with.
+ * @returns {*} Returns the result of `func`.
+ */
+function apply(func, thisArg, args) {
+ switch (args.length) {
+ case 0: return func.call(thisArg);
+ case 1: return func.call(thisArg, args[0]);
+ case 2: return func.call(thisArg, args[0], args[1]);
+ case 3: return func.call(thisArg, args[0], args[1], args[2]);
+ }
+ return func.apply(thisArg, args);
+}
+
+/**
+ * A specialized version of `_.map` for arrays without support for iteratee
+ * shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */
+function arrayMap(array, iteratee) {
+ var index = -1,
+ length = array ? array.length : 0,
+ result = Array(length);
+
+ while (++index < length) {
+ result[index] = iteratee(array[index], index, array);
+ }
+ return result;
+}
+
+/**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+}
+
+/** Used for built-in method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Built-in value references. */
+var Symbol = root.Symbol,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
+
+/* Built-in method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * The base implementation of `_.flatten` with support for restricting flattening.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {number} depth The maximum recursion depth.
+ * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
+ * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */
+function baseFlatten(array, depth, predicate, isStrict, result) {
+ var index = -1,
+ length = array.length;
+
+ predicate || (predicate = isFlattenable);
+ result || (result = []);
+
+ while (++index < length) {
+ var value = array[index];
+ if (depth > 0 && predicate(value)) {
+ if (depth > 1) {
+ // Recursively flatten arrays (susceptible to call stack limits).
+ baseFlatten(value, depth - 1, predicate, isStrict, result);
+ } else {
+ arrayPush(result, value);
+ }
+ } else if (!isStrict) {
+ result[result.length] = value;
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.pick` without support for individual
+ * property identifiers.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} props The property identifiers to pick.
+ * @returns {Object} Returns the new object.
+ */
+function basePick(object, props) {
+ object = Object(object);
+ return basePickBy(object, props, function(value, key) {
+ return key in object;
+ });
+}
+
+/**
+ * The base implementation of `_.pickBy` without support for iteratee shorthands.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} props The property identifiers to pick from.
+ * @param {Function} predicate The function invoked per property.
+ * @returns {Object} Returns the new object.
+ */
+function basePickBy(object, props, predicate) {
+ var index = -1,
+ length = props.length,
+ result = {};
+
+ while (++index < length) {
+ var key = props[index],
+ value = object[key];
+
+ if (predicate(value, key)) {
+ result[key] = value;
+ }
+ }
+ return result;
+}
+
+/**
+ * The base implementation of `_.rest` which doesn't validate or coerce arguments.
+ *
+ * @private
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ */
+function baseRest(func, start) {
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ array = Array(length);
+
+ while (++index < length) {
+ array[index] = args[start + index];
+ }
+ index = -1;
+ var otherArgs = Array(start + 1);
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = array;
+ return apply(func, this, otherArgs);
+ };
+}
+
+/**
+ * Checks if `value` is a flattenable `arguments` object or array.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
+ */
+function isFlattenable(value) {
+ return isArray(value) || isArguments(value) ||
+ !!(spreadableSymbol && value && value[spreadableSymbol]);
+}
+
+/**
+ * Converts `value` to a string key if it's not a string or symbol.
+ *
+ * @private
+ * @param {*} value The value to inspect.
+ * @returns {string|symbol} Returns the key.
+ */
+function toKey(value) {
+ if (typeof value == 'string' || isSymbol(value)) {
+ return value;
+ }
+ var result = (value + '');
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
+}
+
+/**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+}
+
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+var isArray = Array.isArray;
+
+/**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+}
+
+/**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+/**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/**
+ * Checks if `value` is classified as a `Symbol` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
+ * @example
+ *
+ * _.isSymbol(Symbol.iterator);
+ * // => true
+ *
+ * _.isSymbol('abc');
+ * // => false
+ */
+function isSymbol(value) {
+ return typeof value == 'symbol' ||
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
+}
+
+/**
+ * Creates an object composed of the picked `object` properties.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {...(string|string[])} [props] The property identifiers to pick.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': '2', 'c': 3 };
+ *
+ * _.pick(object, ['a', 'c']);
+ * // => { 'a': 1, 'c': 3 }
+ */
+var pick = baseRest(function(object, props) {
+ return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey));
+});
+
+module.exports = pick;
diff --git a/node_modules/lodash.pick/package.json b/node_modules/lodash.pick/package.json
new file mode 100644
index 0000000..180dd14
--- /dev/null
+++ b/node_modules/lodash.pick/package.json
@@ -0,0 +1,113 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.pick@^4.2.1",
+ "scope": null,
+ "escapedName": "lodash.pick",
+ "name": "lodash.pick",
+ "rawSpec": "^4.2.1",
+ "spec": ">=4.2.1 <5.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined"
+ ]
+ ],
+ "_from": "lodash.pick@>=4.2.1 <5.0.0",
+ "_id": "lodash.pick@4.4.0",
+ "_inCache": true,
+ "_location": "/lodash.pick",
+ "_nodeVersion": "4.4.7",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/lodash.pick-4.4.0.tgz_1471110197744_0.19985924172215164"
+ },
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.15.10",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.pick@^4.2.1",
+ "scope": null,
+ "escapedName": "lodash.pick",
+ "name": "lodash.pick",
+ "rawSpec": "^4.2.1",
+ "spec": ">=4.2.1 <5.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fined"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
+ "_shasum": "52f05610fff9ded422611441ed1fc123a03001b3",
+ "_shrinkwrap": null,
+ "_spec": "lodash.pick@^4.2.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fined",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine.bublitz@gmail.com",
+ "url": "https://github.com/phated"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The lodash method `_.pick` exported as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "52f05610fff9ded422611441ed1fc123a03001b3",
+ "tarball": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash-modularized",
+ "pick"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.pick",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "4.4.0"
+}
diff --git a/node_modules/lodash.restparam/LICENSE.txt b/node_modules/lodash.restparam/LICENSE.txt
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash.restparam/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.restparam/README.md b/node_modules/lodash.restparam/README.md
new file mode 100644
index 0000000..80e47a4
--- /dev/null
+++ b/node_modules/lodash.restparam/README.md
@@ -0,0 +1,20 @@
+# lodash.restparam v3.6.1
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.restParam` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.restparam
+```
+
+In Node.js/io.js:
+
+```js
+var restParam = require('lodash.restparam');
+```
+
+See the [documentation](https://lodash.com/docs#restParam) or [package source](https://github.com/lodash/lodash/blob/3.6.1-npm-packages/lodash.restparam) for more details.
diff --git a/node_modules/lodash.restparam/index.js b/node_modules/lodash.restparam/index.js
new file mode 100644
index 0000000..932f47a
--- /dev/null
+++ b/node_modules/lodash.restparam/index.js
@@ -0,0 +1,67 @@
+/**
+ * lodash 3.6.1 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/* Native method references for those with the same name as other `lodash` methods. */
+var nativeMax = Math.max;
+
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */
+function restParam(func, start) {
+ if (typeof func != 'function') {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+ return function() {
+ var args = arguments,
+ index = -1,
+ length = nativeMax(args.length - start, 0),
+ rest = Array(length);
+
+ while (++index < length) {
+ rest[index] = args[start + index];
+ }
+ switch (start) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, args[0], rest);
+ case 2: return func.call(this, args[0], args[1], rest);
+ }
+ var otherArgs = Array(start + 1);
+ index = -1;
+ while (++index < start) {
+ otherArgs[index] = args[index];
+ }
+ otherArgs[start] = rest;
+ return func.apply(this, otherArgs);
+ };
+}
+
+module.exports = restParam;
diff --git a/node_modules/lodash.restparam/package.json b/node_modules/lodash.restparam/package.json
new file mode 100644
index 0000000..2e619af
--- /dev/null
+++ b/node_modules/lodash.restparam/package.json
@@ -0,0 +1,129 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "lodash.restparam@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.restparam",
+ "name": "lodash.restparam",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template"
+ ]
+ ],
+ "_from": "lodash.restparam@>=3.0.0 <4.0.0",
+ "_id": "lodash.restparam@3.6.1",
+ "_inCache": true,
+ "_location": "/lodash.restparam",
+ "_nodeVersion": "0.12.2",
+ "_npmUser": {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ "_npmVersion": "2.7.6",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "lodash.restparam@^3.0.0",
+ "scope": null,
+ "escapedName": "lodash.restparam",
+ "name": "lodash.restparam",
+ "rawSpec": "^3.0.0",
+ "spec": ">=3.0.0 <4.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/lodash.template"
+ ],
+ "_resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "_shasum": "936a4e309ef330a7645ed4145986c85ae5b20805",
+ "_shrinkwrap": null,
+ "_spec": "lodash.restparam@^3.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lodash.template",
+ "author": {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/lodash/lodash/issues"
+ },
+ "contributors": [
+ {
+ "name": "John-David Dalton",
+ "email": "john.david.dalton@gmail.com",
+ "url": "http://allyoucanleet.com/"
+ },
+ {
+ "name": "Benjamin Tan",
+ "email": "demoneaux@gmail.com",
+ "url": "https://d10.github.io/"
+ },
+ {
+ "name": "Blaine Bublitz",
+ "email": "blaine@iceddev.com",
+ "url": "http://www.iceddev.com/"
+ },
+ {
+ "name": "Kit Cambridge",
+ "email": "github@kitcambridge.be",
+ "url": "http://kitcambridge.be/"
+ },
+ {
+ "name": "Mathias Bynens",
+ "email": "mathias@qiwi.be",
+ "url": "https://mathiasbynens.be/"
+ }
+ ],
+ "dependencies": {},
+ "description": "The modern build of lodash’s `_.restParam` as a module.",
+ "devDependencies": {},
+ "directories": {},
+ "dist": {
+ "shasum": "936a4e309ef330a7645ed4145986c85ae5b20805",
+ "tarball": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz"
+ },
+ "homepage": "https://lodash.com/",
+ "icon": "https://lodash.com/icon.svg",
+ "keywords": [
+ "lodash",
+ "lodash-modularized",
+ "stdlib",
+ "util"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "jdalton",
+ "email": "john.david.dalton@gmail.com"
+ },
+ {
+ "name": "d10",
+ "email": "demoneaux@gmail.com"
+ },
+ {
+ "name": "kitcambridge",
+ "email": "github@kitcambridge.be"
+ },
+ {
+ "name": "mathias",
+ "email": "mathias@qiwi.be"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "lodash.restparam",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/lodash/lodash.git"
+ },
+ "scripts": {
+ "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\""
+ },
+ "version": "3.6.1"
+}
diff --git a/node_modules/lodash.template/LICENSE b/node_modules/lodash.template/LICENSE
new file mode 100644
index 0000000..9cd87e5
--- /dev/null
+++ b/node_modules/lodash.template/LICENSE
@@ -0,0 +1,22 @@
+Copyright 2012-2015 The Dojo Foundation
+Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+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/node_modules/lodash.template/README.md b/node_modules/lodash.template/README.md
new file mode 100644
index 0000000..f542f71
--- /dev/null
+++ b/node_modules/lodash.template/README.md
@@ -0,0 +1,20 @@
+# lodash.template v3.6.2
+
+The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.template` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module.
+
+## Installation
+
+Using npm:
+
+```bash
+$ {sudo -H} npm i -g npm
+$ npm i --save lodash.template
+```
+
+In Node.js/io.js:
+
+```js
+var template = require('lodash.template');
+```
+
+See the [documentation](https://lodash.com/docs#template) or [package source](https://github.com/lodash/lodash/blob/3.6.2-npm-packages/lodash.template) for more details.
diff --git a/node_modules/lodash.template/index.js b/node_modules/lodash.template/index.js
new file mode 100644
index 0000000..e5a9629
--- /dev/null
+++ b/node_modules/lodash.template/index.js
@@ -0,0 +1,389 @@
+/**
+ * lodash 3.6.2 (Custom Build)
+ * Build: `lodash modern modularize exports="npm" -o ./`
+ * Copyright 2012-2015 The Dojo Foundation
+ * Based on Underscore.js 1.8.3
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license
+ */
+var baseCopy = require('lodash._basecopy'),
+ baseToString = require('lodash._basetostring'),
+ baseValues = require('lodash._basevalues'),
+ isIterateeCall = require('lodash._isiterateecall'),
+ reInterpolate = require('lodash._reinterpolate'),
+ keys = require('lodash.keys'),
+ restParam = require('lodash.restparam'),
+ templateSettings = require('lodash.templatesettings');
+
+/** `Object#toString` result references. */
+var errorTag = '[object Error]';
+
+/** Used to match empty string literals in compiled template source. */
+var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
+var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+/** Used to ensure capturing order of template delimiters. */
+var reNoMatch = /($^)/;
+
+/** Used to match unescaped characters in compiled string literals. */
+var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+
+/** Used to escape characters for inclusion in compiled string literals. */
+var stringEscapes = {
+ '\\': '\\',
+ "'": "'",
+ '\n': 'n',
+ '\r': 'r',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+};
+
+/**
+ * Used by `_.template` to escape characters for inclusion in compiled string literals.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */
+function escapeStringChar(chr) {
+ return '\\' + stringEscapes[chr];
+}
+
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */
+function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+}
+
+/** Used for native method references. */
+var objectProto = Object.prototype;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objToString = objectProto.toString;
+
+/**
+ * Used by `_.template` to customize its `_.assign` use.
+ *
+ * **Note:** This function is like `assignDefaults` except that it ignores
+ * inherited property values when checking if a property is `undefined`.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @param {string} key The key associated with the object and source values.
+ * @param {Object} object The destination object.
+ * @returns {*} Returns the value to assign to the destination object.
+ */
+function assignOwnDefaults(objectValue, sourceValue, key, object) {
+ return (objectValue === undefined || !hasOwnProperty.call(object, key))
+ ? sourceValue
+ : objectValue;
+}
+
+/**
+ * A specialized version of `_.assign` for customizing assigned values without
+ * support for argument juggling, multiple sources, and `this` binding `customizer`
+ * functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ */
+function assignWith(object, source, customizer) {
+ var index = -1,
+ props = keys(source),
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index],
+ value = object[key],
+ result = customizer(value, source[key], key, object, source);
+
+ if ((result === result ? (result !== value) : (value === value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = result;
+ }
+ }
+ return object;
+}
+
+/**
+ * The base implementation of `_.assign` without support for argument juggling,
+ * multiple sources, and `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+function baseAssign(object, source) {
+ return source == null
+ ? object
+ : baseCopy(source, keys(source), object);
+}
+
+/**
+ * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+ * `SyntaxError`, `TypeError`, or `URIError` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+ * @example
+ *
+ * _.isError(new Error);
+ * // => true
+ *
+ * _.isError(Error);
+ * // => false
+ */
+function isError(value) {
+ return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
+}
+
+/**
+ * Creates a compiled template function that can interpolate data properties
+ * in "interpolate" delimiters, HTML-escape interpolated data properties in
+ * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+ * properties may be accessed as free variables in the template. If a setting
+ * object is provided it takes precedence over `_.templateSettings` values.
+ *
+ * **Note:** In the development build `_.template` utilizes
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+ * for easier debugging.
+ *
+ * For more information on precompiling templates see
+ * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+ *
+ * For more information on Chrome extension sandboxes see
+ * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The template string.
+ * @param {Object} [options] The options object.
+ * @param {RegExp} [options.escape] The HTML "escape" delimiter.
+ * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+ * @param {Object} [options.imports] An object to import into the template as free variables.
+ * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+ * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
+ * @param {string} [options.variable] The data object variable name.
+ * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
+ * @returns {Function} Returns the compiled template function.
+ * @example
+ *
+ * // using the "interpolate" delimiter to create a compiled template
+ * var compiled = _.template('hello <%= user %>!');
+ * compiled({ 'user': 'fred' });
+ * // => 'hello fred!'
+ *
+ * // using the HTML "escape" delimiter to escape data property values
+ * var compiled = _.template('<%- value %> ');
+ * compiled({ 'value': '
+```
+
+Note that the [es5-shim](https://github.com/es-shims/es5-shim) must be loaded before this library to support browsers pre IE9.
+
+```html
+
+```
+
+## Usage
+
+The example below shows how you can load the promise library (in a way that works on both client and server). It then demonstrates creating a promise from scratch. You simply call `new Promise(fn)`. There is a complete specification for what is returned by this method in [Promises/A+](http://promises-aplus.github.com/promises-spec/).
+
+```javascript
+var Promise = require('promise');
+
+var promise = new Promise(function (resolve, reject) {
+ get('http://www.google.com', function (err, res) {
+ if (err) reject(err);
+ else resolve(res);
+ });
+});
+```
+
+## API
+
+Before all examples, you will need:
+
+```js
+var Promise = require('promise');
+```
+
+### new Promise(resolver)
+
+This creates and returns a new promise. `resolver` must be a function. The `resolver` function is passed two arguments:
+
+ 1. `resolve` should be called with a single argument. If it is called with a non-promise value then the promise is fulfilled with that value. If it is called with a promise (A) then the returned promise takes on the state of that new promise (A).
+ 2. `reject` should be called with a single argument. The returned promise will be rejected with that argument.
+
+### Static Functions
+
+ These methods are invoked by calling `Promise.methodName`.
+
+#### Promise.resolve(value)
+
+(deprecated aliases: `Promise.from(value)`, `Promise.cast(value)`)
+
+Converts values and foreign promises into Promises/A+ promises. If you pass it a value then it returns a Promise for that value. If you pass it something that is close to a promise (such as a jQuery attempt at a promise) it returns a Promise that takes on the state of `value` (rejected or fulfilled).
+
+#### Promise.all(array)
+
+Returns a promise for an array. If it is called with a single argument that `Array.isArray` then this returns a promise for a copy of that array with any promises replaced by their fulfilled values. Otherwise it returns a promise for an array that conatins its arguments, except with promises replaced by their resolution values. e.g.
+
+```js
+Promise.all([Promise.resolve('a'), 'b', Promise.resolve('c')])
+ .then(function (res) {
+ assert(res[0] === 'a')
+ assert(res[1] === 'b')
+ assert(res[2] === 'c')
+ })
+
+Promise.all(Promise.resolve('a'), 'b', Promise.resolve('c'))
+ .then(function (res) {
+ assert(res[0] === 'a')
+ assert(res[1] === 'b')
+ assert(res[2] === 'c')
+ })
+```
+
+#### Promise.denodeify(fn)
+
+_Non Standard_
+
+Takes a function which accepts a node style callback and returns a new function that returns a promise instead.
+
+e.g.
+
+```javascript
+var fs = require('fs')
+
+var read = Promise.denodeify(fs.readFile)
+var write = Promise.denodeify(fs.writeFile)
+
+var p = read('foo.json', 'utf8')
+ .then(function (str) {
+ return write('foo.json', JSON.stringify(JSON.parse(str), null, ' '), 'utf8')
+ })
+```
+
+#### Promise.nodeify(fn)
+
+_Non Standard_
+
+The twin to `denodeify` is useful when you want to export an API that can be used by people who haven't learnt about the brilliance of promises yet.
+
+```javascript
+module.exports = Promise.nodeify(awesomeAPI)
+function awesomeAPI(a, b) {
+ return download(a, b)
+}
+```
+
+If the last argument passed to `module.exports` is a function, then it will be treated like a node.js callback and not parsed on to the child function, otherwise the API will just return a promise.
+
+### Prototype Methods
+
+These methods are invoked on a promise instance by calling `myPromise.methodName`
+
+### Promise#then(onFulfilled, onRejected)
+
+This method follows the [Promises/A+ spec](http://promises-aplus.github.io/promises-spec/). It explains things very clearly so I recommend you read it.
+
+Either `onFulfilled` or `onRejected` will be called and they will not be called more than once. They will be passed a single argument and will always be called asynchronously (in the next turn of the event loop).
+
+If the promise is fulfilled then `onFulfilled` is called. If the promise is rejected then `onRejected` is called.
+
+The call to `.then` also returns a promise. If the handler that is called returns a promise, the promise returned by `.then` takes on the state of that returned promise. If the handler that is called returns a value that is not a promise, the promise returned by `.then` will be fulfilled with that value. If the handler that is called throws an exception then the promise returned by `.then` is rejected with that exception.
+
+#### Promise#catch(onRejected)
+
+Sugar for `Promise#then(null, onRejected)`, to mirror `catch` in synchronous code.
+
+#### Promise#done(onFulfilled, onRejected)
+
+_Non Standard_
+
+The same semantics as `.then` except that it does not return a promise and any exceptions are re-thrown so that they can be logged (crashing the application in non-browser environments)
+
+#### Promise#nodeify(callback)
+
+_Non Standard_
+
+If `callback` is `null` or `undefined` it just returns `this`. If `callback` is a function it is called with rejection reason as the first argument and result as the second argument (as per the node.js convention).
+
+This lets you write API functions that look like:
+
+```javascript
+function awesomeAPI(foo, bar, callback) {
+ return internalAPI(foo, bar)
+ .then(parseResult)
+ .then(null, retryErrors)
+ .nodeify(callback)
+}
+```
+
+People who use typical node.js style callbacks will be able to just pass a callback and get the expected behavior. The enlightened people can not pass a callback and will get awesome promises.
+
+## Extending Promises
+
+ There are three options for extending the promises created by this library.
+
+### Inheritance
+
+ You can use inheritance if you want to create your own complete promise library with this as your basic starting point, perfect if you have lots of cool features you want to add. Here is an example of a promise library called `Awesome`, which is built on top of `Promise` correctly.
+
+```javascript
+var Promise = require('promise');
+function Awesome(fn) {
+ if (!(this instanceof Awesome)) return new Awesome(fn);
+ Promise.call(this, fn);
+}
+Awesome.prototype = Object.create(Promise.prototype);
+Awesome.prototype.constructor = Awesome;
+
+//Awesome extension
+Awesome.prototype.spread = function (cb) {
+ return this.then(function (arr) {
+ return cb.apply(this, arr);
+ })
+};
+```
+
+ N.B. if you fail to set the prototype and constructor properly or fail to do Promise.call, things can fail in really subtle ways.
+
+### Wrap
+
+ This is the nuclear option, for when you want to start from scratch. It ensures you won't be impacted by anyone who is extending the prototype (see below).
+
+```javascript
+function Uber(fn) {
+ if (!(this instanceof Uber)) return new Uber(fn);
+ var _prom = new Promise(fn);
+ this.then = _prom.then;
+}
+
+Uber.prototype.spread = function (cb) {
+ return this.then(function (arr) {
+ return cb.apply(this, arr);
+ })
+};
+```
+
+### Extending the Prototype
+
+ In general, you should never extend the prototype of this promise implimenation because your extensions could easily conflict with someone elses extensions. However, this organisation will host a library of extensions which do not conflict with each other, so you can safely enable any of those. If you think of an extension that we don't provide and you want to write it, submit an issue on this repository and (if I agree) I'll set you up with a repository and give you permission to commit to it.
+
+## License
+
+ MIT
diff --git a/node_modules/promise/core.js b/node_modules/promise/core.js
new file mode 100644
index 0000000..5f332a2
--- /dev/null
+++ b/node_modules/promise/core.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = require('./lib/core.js');
+
+console.error('require("promise/core") is deprecated, use require("promise/lib/core") instead.');
diff --git a/node_modules/promise/index.js b/node_modules/promise/index.js
new file mode 100644
index 0000000..17d5ed1
--- /dev/null
+++ b/node_modules/promise/index.js
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = require('./lib/core.js')
+require('./lib/done.js')
+require('./lib/es6-extensions.js')
+require('./lib/node-extensions.js')
\ No newline at end of file
diff --git a/node_modules/promise/lib/core.js b/node_modules/promise/lib/core.js
new file mode 100644
index 0000000..05a4313
--- /dev/null
+++ b/node_modules/promise/lib/core.js
@@ -0,0 +1,105 @@
+'use strict';
+
+var asap = require('asap')
+
+module.exports = Promise;
+function Promise(fn) {
+ if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new')
+ if (typeof fn !== 'function') throw new TypeError('not a function')
+ var state = null
+ var value = null
+ var deferreds = []
+ var self = this
+
+ this.then = function(onFulfilled, onRejected) {
+ return new self.constructor(function(resolve, reject) {
+ handle(new Handler(onFulfilled, onRejected, resolve, reject))
+ })
+ }
+
+ function handle(deferred) {
+ if (state === null) {
+ deferreds.push(deferred)
+ return
+ }
+ asap(function() {
+ var cb = state ? deferred.onFulfilled : deferred.onRejected
+ if (cb === null) {
+ (state ? deferred.resolve : deferred.reject)(value)
+ return
+ }
+ var ret
+ try {
+ ret = cb(value)
+ }
+ catch (e) {
+ deferred.reject(e)
+ return
+ }
+ deferred.resolve(ret)
+ })
+ }
+
+ function resolve(newValue) {
+ try { //Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
+ if (newValue === self) throw new TypeError('A promise cannot be resolved with itself.')
+ if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {
+ var then = newValue.then
+ if (typeof then === 'function') {
+ doResolve(then.bind(newValue), resolve, reject)
+ return
+ }
+ }
+ state = true
+ value = newValue
+ finale()
+ } catch (e) { reject(e) }
+ }
+
+ function reject(newValue) {
+ state = false
+ value = newValue
+ finale()
+ }
+
+ function finale() {
+ for (var i = 0, len = deferreds.length; i < len; i++)
+ handle(deferreds[i])
+ deferreds = null
+ }
+
+ doResolve(fn, resolve, reject)
+}
+
+
+function Handler(onFulfilled, onRejected, resolve, reject){
+ this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null
+ this.onRejected = typeof onRejected === 'function' ? onRejected : null
+ this.resolve = resolve
+ this.reject = reject
+}
+
+/**
+ * Take a potentially misbehaving resolver function and make sure
+ * onFulfilled and onRejected are only called once.
+ *
+ * Makes no guarantees about asynchrony.
+ */
+function doResolve(fn, onFulfilled, onRejected) {
+ var done = false;
+ try {
+ fn(function (value) {
+ if (done) return
+ done = true
+ onFulfilled(value)
+ }, function (reason) {
+ if (done) return
+ done = true
+ onRejected(reason)
+ })
+ } catch (ex) {
+ if (done) return
+ done = true
+ onRejected(ex)
+ }
+}
diff --git a/node_modules/promise/lib/done.js b/node_modules/promise/lib/done.js
new file mode 100644
index 0000000..2da6208
--- /dev/null
+++ b/node_modules/promise/lib/done.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var Promise = require('./core.js')
+var asap = require('asap')
+
+module.exports = Promise
+Promise.prototype.done = function (onFulfilled, onRejected) {
+ var self = arguments.length ? this.then.apply(this, arguments) : this
+ self.then(null, function (err) {
+ asap(function () {
+ throw err
+ })
+ })
+}
\ No newline at end of file
diff --git a/node_modules/promise/lib/es6-extensions.js b/node_modules/promise/lib/es6-extensions.js
new file mode 100644
index 0000000..084c1cd
--- /dev/null
+++ b/node_modules/promise/lib/es6-extensions.js
@@ -0,0 +1,108 @@
+'use strict';
+
+//This file contains the ES6 extensions to the core Promises/A+ API
+
+var Promise = require('./core.js')
+var asap = require('asap')
+
+module.exports = Promise
+
+/* Static Functions */
+
+function ValuePromise(value) {
+ this.then = function (onFulfilled) {
+ if (typeof onFulfilled !== 'function') return this
+ return new Promise(function (resolve, reject) {
+ asap(function () {
+ try {
+ resolve(onFulfilled(value))
+ } catch (ex) {
+ reject(ex);
+ }
+ })
+ })
+ }
+}
+ValuePromise.prototype = Promise.prototype
+
+var TRUE = new ValuePromise(true)
+var FALSE = new ValuePromise(false)
+var NULL = new ValuePromise(null)
+var UNDEFINED = new ValuePromise(undefined)
+var ZERO = new ValuePromise(0)
+var EMPTYSTRING = new ValuePromise('')
+
+Promise.resolve = function (value) {
+ if (value instanceof Promise) return value
+
+ if (value === null) return NULL
+ if (value === undefined) return UNDEFINED
+ if (value === true) return TRUE
+ if (value === false) return FALSE
+ if (value === 0) return ZERO
+ if (value === '') return EMPTYSTRING
+
+ if (typeof value === 'object' || typeof value === 'function') {
+ try {
+ var then = value.then
+ if (typeof then === 'function') {
+ return new Promise(then.bind(value))
+ }
+ } catch (ex) {
+ return new Promise(function (resolve, reject) {
+ reject(ex)
+ })
+ }
+ }
+
+ return new ValuePromise(value)
+}
+
+Promise.all = function (arr) {
+ var args = Array.prototype.slice.call(arr)
+
+ return new Promise(function (resolve, reject) {
+ if (args.length === 0) return resolve([])
+ var remaining = args.length
+ function res(i, val) {
+ try {
+ if (val && (typeof val === 'object' || typeof val === 'function')) {
+ var then = val.then
+ if (typeof then === 'function') {
+ then.call(val, function (val) { res(i, val) }, reject)
+ return
+ }
+ }
+ args[i] = val
+ if (--remaining === 0) {
+ resolve(args);
+ }
+ } catch (ex) {
+ reject(ex)
+ }
+ }
+ for (var i = 0; i < args.length; i++) {
+ res(i, args[i])
+ }
+ })
+}
+
+Promise.reject = function (value) {
+ return new Promise(function (resolve, reject) {
+ reject(value);
+ });
+}
+
+Promise.race = function (values) {
+ return new Promise(function (resolve, reject) {
+ values.forEach(function(value){
+ Promise.resolve(value).then(resolve, reject);
+ })
+ });
+}
+
+/* Prototype Methods */
+
+Promise.prototype['catch'] = function (onRejected) {
+ return this.then(null, onRejected);
+}
diff --git a/node_modules/promise/lib/node-extensions.js b/node_modules/promise/lib/node-extensions.js
new file mode 100644
index 0000000..5e60f9e
--- /dev/null
+++ b/node_modules/promise/lib/node-extensions.js
@@ -0,0 +1,63 @@
+'use strict';
+
+//This file contains then/promise specific extensions that are only useful for node.js interop
+
+var Promise = require('./core.js')
+var asap = require('asap')
+
+module.exports = Promise
+
+/* Static Functions */
+
+Promise.denodeify = function (fn, argumentCount) {
+ argumentCount = argumentCount || Infinity
+ return function () {
+ var self = this
+ var args = Array.prototype.slice.call(arguments)
+ return new Promise(function (resolve, reject) {
+ while (args.length && args.length > argumentCount) {
+ args.pop()
+ }
+ args.push(function (err, res) {
+ if (err) reject(err)
+ else resolve(res)
+ })
+ var res = fn.apply(self, args)
+ if (res && (typeof res === 'object' || typeof res === 'function') && typeof res.then === 'function') {
+ resolve(res)
+ }
+ })
+ }
+}
+Promise.nodeify = function (fn) {
+ return function () {
+ var args = Array.prototype.slice.call(arguments)
+ var callback = typeof args[args.length - 1] === 'function' ? args.pop() : null
+ var ctx = this
+ try {
+ return fn.apply(this, arguments).nodeify(callback, ctx)
+ } catch (ex) {
+ if (callback === null || typeof callback == 'undefined') {
+ return new Promise(function (resolve, reject) { reject(ex) })
+ } else {
+ asap(function () {
+ callback.call(ctx, ex)
+ })
+ }
+ }
+ }
+}
+
+Promise.prototype.nodeify = function (callback, ctx) {
+ if (typeof callback != 'function') return this
+
+ this.then(function (value) {
+ asap(function () {
+ callback.call(ctx, null, value)
+ })
+ }, function (err) {
+ asap(function () {
+ callback.call(ctx, err)
+ })
+ })
+}
diff --git a/node_modules/promise/package.json b/node_modules/promise/package.json
new file mode 100644
index 0000000..1b69a3d
--- /dev/null
+++ b/node_modules/promise/package.json
@@ -0,0 +1,90 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "promise@^6.0.1",
+ "scope": null,
+ "escapedName": "promise",
+ "name": "promise",
+ "rawSpec": "^6.0.1",
+ "spec": ">=6.0.1 <7.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/jstransformer"
+ ]
+ ],
+ "_from": "promise@>=6.0.1 <7.0.0",
+ "_id": "promise@6.1.0",
+ "_inCache": true,
+ "_location": "/promise",
+ "_npmUser": {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ "_npmVersion": "1.5.0-alpha-4",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "promise@^6.0.1",
+ "scope": null,
+ "escapedName": "promise",
+ "name": "promise",
+ "rawSpec": "^6.0.1",
+ "spec": ">=6.0.1 <7.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/jstransformer"
+ ],
+ "_resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz",
+ "_shasum": "2ce729f6b94b45c26891ad0602c5c90e04c6eef6",
+ "_shrinkwrap": null,
+ "_spec": "promise@^6.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/jstransformer",
+ "author": {
+ "name": "ForbesLindesay"
+ },
+ "bugs": {
+ "url": "https://github.com/then/promise/issues"
+ },
+ "dependencies": {
+ "asap": "~1.0.0"
+ },
+ "description": "Bare bones Promises/A+ implementation",
+ "devDependencies": {
+ "better-assert": "*",
+ "mocha": "*",
+ "promises-aplus-tests": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "2ce729f6b94b45c26891ad0602c5c90e04c6eef6",
+ "tarball": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz"
+ },
+ "gitHead": "c627c0cc1f886ed3aa26edec97838ec9e7dd858b",
+ "homepage": "https://github.com/then/promise",
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "forbeslindesay",
+ "email": "forbes@lindesay.co.uk"
+ },
+ {
+ "name": "nathan7",
+ "email": "nathan@nathan7.eu"
+ }
+ ],
+ "name": "promise",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/then/promise.git"
+ },
+ "scripts": {
+ "test": "mocha --timeout 200 --slow 99999",
+ "test-extensions": "mocha test/extensions-tests.js -R spec --timeout 200 --slow 999999",
+ "test-resolve": "mocha test/resolver-tests.js -R spec --timeout 200 --slow 999999"
+ },
+ "version": "6.1.0"
+}
diff --git a/node_modules/promise/polyfill-done.js b/node_modules/promise/polyfill-done.js
new file mode 100644
index 0000000..e50b4c0
--- /dev/null
+++ b/node_modules/promise/polyfill-done.js
@@ -0,0 +1,12 @@
+// should work in any browser without browserify
+
+if (typeof Promise.prototype.done !== 'function') {
+ Promise.prototype.done = function (onFulfilled, onRejected) {
+ var self = arguments.length ? this.then.apply(this, arguments) : this
+ self.then(null, function (err) {
+ setTimeout(function () {
+ throw err
+ }, 0)
+ })
+ }
+}
\ No newline at end of file
diff --git a/node_modules/promise/polyfill.js b/node_modules/promise/polyfill.js
new file mode 100644
index 0000000..db099f8
--- /dev/null
+++ b/node_modules/promise/polyfill.js
@@ -0,0 +1,10 @@
+// not "use strict" so we can declare global "Promise"
+
+var asap = require('asap');
+
+if (typeof Promise === 'undefined') {
+ Promise = require('./lib/core.js')
+ require('./lib/es6-extensions.js')
+}
+
+require('./polyfill-done.js');
diff --git a/node_modules/proto-list/LICENSE b/node_modules/proto-list/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/proto-list/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+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/node_modules/proto-list/README.md b/node_modules/proto-list/README.md
new file mode 100644
index 0000000..43cfa35
--- /dev/null
+++ b/node_modules/proto-list/README.md
@@ -0,0 +1,3 @@
+A list of objects, bound by their prototype chain.
+
+Used in npm's config stuff.
diff --git a/node_modules/proto-list/package.json b/node_modules/proto-list/package.json
new file mode 100644
index 0000000..f6ed714
--- /dev/null
+++ b/node_modules/proto-list/package.json
@@ -0,0 +1,83 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "proto-list@~1.2.1",
+ "scope": null,
+ "escapedName": "proto-list",
+ "name": "proto-list",
+ "rawSpec": "~1.2.1",
+ "spec": ">=1.2.1 <1.3.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/config-chain"
+ ]
+ ],
+ "_from": "proto-list@>=1.2.1 <1.3.0",
+ "_id": "proto-list@1.2.4",
+ "_inCache": true,
+ "_location": "/proto-list",
+ "_nodeVersion": "2.0.1",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "_npmVersion": "2.10.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "proto-list@~1.2.1",
+ "scope": null,
+ "escapedName": "proto-list",
+ "name": "proto-list",
+ "rawSpec": "~1.2.1",
+ "spec": ">=1.2.1 <1.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/config-chain"
+ ],
+ "_resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "_shasum": "212d5bfe1318306a420f6402b8e26ff39647a849",
+ "_shrinkwrap": null,
+ "_spec": "proto-list@~1.2.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/config-chain",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/proto-list/issues"
+ },
+ "dependencies": {},
+ "description": "A utility for managing a prototype chain",
+ "devDependencies": {
+ "tap": "0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "212d5bfe1318306a420f6402b8e26ff39647a849",
+ "tarball": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz"
+ },
+ "gitHead": "9e4af12d4dddee2fd531f0fe0c21c9cfacb78ac0",
+ "homepage": "https://github.com/isaacs/proto-list#readme",
+ "license": "ISC",
+ "main": "./proto-list.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "proto-list",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/proto-list.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.2.4"
+}
diff --git a/node_modules/proto-list/proto-list.js b/node_modules/proto-list/proto-list.js
new file mode 100644
index 0000000..b55c25c
--- /dev/null
+++ b/node_modules/proto-list/proto-list.js
@@ -0,0 +1,88 @@
+
+module.exports = ProtoList
+
+function setProto(obj, proto) {
+ if (typeof Object.setPrototypeOf === "function")
+ return Object.setPrototypeOf(obj, proto)
+ else
+ obj.__proto__ = proto
+}
+
+function ProtoList () {
+ this.list = []
+ var root = null
+ Object.defineProperty(this, 'root', {
+ get: function () { return root },
+ set: function (r) {
+ root = r
+ if (this.list.length) {
+ setProto(this.list[this.list.length - 1], r)
+ }
+ },
+ enumerable: true,
+ configurable: true
+ })
+}
+
+ProtoList.prototype =
+ { get length () { return this.list.length }
+ , get keys () {
+ var k = []
+ for (var i in this.list[0]) k.push(i)
+ return k
+ }
+ , get snapshot () {
+ var o = {}
+ this.keys.forEach(function (k) { o[k] = this.get(k) }, this)
+ return o
+ }
+ , get store () {
+ return this.list[0]
+ }
+ , push : function (obj) {
+ if (typeof obj !== "object") obj = {valueOf:obj}
+ if (this.list.length >= 1) {
+ setProto(this.list[this.list.length - 1], obj)
+ }
+ setProto(obj, this.root)
+ return this.list.push(obj)
+ }
+ , pop : function () {
+ if (this.list.length >= 2) {
+ setProto(this.list[this.list.length - 2], this.root)
+ }
+ return this.list.pop()
+ }
+ , unshift : function (obj) {
+ setProto(obj, this.list[0] || this.root)
+ return this.list.unshift(obj)
+ }
+ , shift : function () {
+ if (this.list.length === 1) {
+ setProto(this.list[0], this.root)
+ }
+ return this.list.shift()
+ }
+ , get : function (key) {
+ return this.list[0][key]
+ }
+ , set : function (key, val, save) {
+ if (!this.length) this.push({})
+ if (save && this.list[0].hasOwnProperty(key)) this.push({})
+ return this.list[0][key] = val
+ }
+ , forEach : function (fn, thisp) {
+ for (var key in this.list[0]) fn.call(thisp, key, this.list[0][key])
+ }
+ , slice : function () {
+ return this.list.slice.apply(this.list, arguments)
+ }
+ , splice : function () {
+ // handle injections
+ var ret = this.list.splice.apply(this.list, arguments)
+ for (var i = 0, l = this.list.length; i < l; i++) {
+ setProto(this.list[i], this.list[i + 1] || this.root)
+ }
+ return ret
+ }
+ }
diff --git a/node_modules/proto-list/test/basic.js b/node_modules/proto-list/test/basic.js
new file mode 100644
index 0000000..5cd66be
--- /dev/null
+++ b/node_modules/proto-list/test/basic.js
@@ -0,0 +1,61 @@
+var tap = require("tap")
+ , test = tap.test
+ , ProtoList = require("../proto-list.js")
+
+tap.plan(1)
+
+tap.test("protoList tests", function (t) {
+ var p = new ProtoList
+ p.push({foo:"bar"})
+ p.push({})
+ p.set("foo", "baz")
+ t.equal(p.get("foo"), "baz")
+
+ var p = new ProtoList
+ p.push({foo:"bar"})
+ p.set("foo", "baz")
+ t.equal(p.get("foo"), "baz")
+ t.equal(p.length, 1)
+ p.pop()
+ t.equal(p.length, 0)
+ p.set("foo", "asdf")
+ t.equal(p.length, 1)
+ t.equal(p.get("foo"), "asdf")
+ p.push({bar:"baz"})
+ t.equal(p.length, 2)
+ t.equal(p.get("foo"), "asdf")
+ p.shift()
+ t.equal(p.length, 1)
+ t.equal(p.get("foo"), undefined)
+
+
+ p.unshift({foo:"blo", bar:"rab"})
+ p.unshift({foo:"boo"})
+ t.equal(p.length, 3)
+ t.equal(p.get("foo"), "boo")
+ t.equal(p.get("bar"), "rab")
+
+ var ret = p.splice(1, 1, {bar:"bar"})
+ t.same(ret, [{foo:"blo", bar:"rab"}])
+ t.equal(p.get("bar"), "bar")
+
+ // should not inherit default object properties
+ t.equal(p.get('hasOwnProperty'), undefined)
+
+ // unless we give it those.
+ p.root = {}
+ t.equal(p.get('hasOwnProperty'), {}.hasOwnProperty)
+
+ p.root = {default:'monkey'}
+ t.equal(p.get('default'), 'monkey')
+
+ p.push({red:'blue'})
+ p.push({red:'blue'})
+ p.push({red:'blue'})
+ while (p.length) {
+ t.equal(p.get('default'), 'monkey')
+ p.shift()
+ }
+
+ t.end()
+})
diff --git a/node_modules/proxy-addr/HISTORY.md b/node_modules/proxy-addr/HISTORY.md
new file mode 100644
index 0000000..9a62abc
--- /dev/null
+++ b/node_modules/proxy-addr/HISTORY.md
@@ -0,0 +1,109 @@
+1.1.4 / 2017-03-24
+==================
+
+ * deps: ipaddr.js@1.3.0
+
+1.1.3 / 2017-01-14
+==================
+
+ * deps: ipaddr.js@1.2.0
+
+1.1.2 / 2016-05-29
+==================
+
+ * deps: ipaddr.js@1.1.1
+ - Fix IPv6-mapped IPv4 validation edge cases
+
+1.1.1 / 2016-05-03
+==================
+
+ * Fix regression matching mixed versions against multiple subnets
+
+1.1.0 / 2016-05-01
+==================
+
+ * Fix accepting various invalid netmasks
+ - IPv4 netmasks must be contingous
+ - IPv6 addresses cannot be used as a netmask
+ * deps: ipaddr.js@1.1.0
+
+1.0.10 / 2015-12-09
+===================
+
+ * deps: ipaddr.js@1.0.5
+ - Fix regression in `isValid` with non-string arguments
+
+1.0.9 / 2015-12-01
+==================
+
+ * deps: ipaddr.js@1.0.4
+ - Fix accepting some invalid IPv6 addresses
+ - Reject CIDRs with negative or overlong masks
+ * perf: enable strict mode
+
+1.0.8 / 2015-05-10
+==================
+
+ * deps: ipaddr.js@1.0.1
+
+1.0.7 / 2015-03-16
+==================
+
+ * deps: ipaddr.js@0.1.9
+ - Fix OOM on certain inputs to `isValid`
+
+1.0.6 / 2015-02-01
+==================
+
+ * deps: ipaddr.js@0.1.8
+
+1.0.5 / 2015-01-08
+==================
+
+ * deps: ipaddr.js@0.1.6
+
+1.0.4 / 2014-11-23
+==================
+
+ * deps: ipaddr.js@0.1.5
+ - Fix edge cases with `isValid`
+
+1.0.3 / 2014-09-21
+==================
+
+ * Use `forwarded` npm module
+
+1.0.2 / 2014-09-18
+==================
+
+ * Fix a global leak when multiple subnets are trusted
+ * Support Node.js 0.6
+ * deps: ipaddr.js@0.1.3
+
+1.0.1 / 2014-06-03
+==================
+
+ * Fix links in npm package
+
+1.0.0 / 2014-05-08
+==================
+
+ * Add `trust` argument to determine proxy trust on
+ * Accepts custom function
+ * Accepts IPv4/IPv6 address(es)
+ * Accepts subnets
+ * Accepts pre-defined names
+ * Add optional `trust` argument to `proxyaddr.all` to
+ stop at first untrusted
+ * Add `proxyaddr.compile` to pre-compile `trust` function
+ to make subsequent calls faster
+
+0.0.1 / 2014-05-04
+==================
+
+ * Fix bad npm publish
+
+0.0.0 / 2014-05-04
+==================
+
+ * Initial release
diff --git a/node_modules/proxy-addr/LICENSE b/node_modules/proxy-addr/LICENSE
new file mode 100644
index 0000000..cab251c
--- /dev/null
+++ b/node_modules/proxy-addr/LICENSE
@@ -0,0 +1,22 @@
+(The MIT License)
+
+Copyright (c) 2014-2016 Douglas Christopher Wilson
+
+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/node_modules/proxy-addr/README.md b/node_modules/proxy-addr/README.md
new file mode 100644
index 0000000..6b1075a
--- /dev/null
+++ b/node_modules/proxy-addr/README.md
@@ -0,0 +1,140 @@
+# proxy-addr
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build Status][travis-image]][travis-url]
+[![Test Coverage][coveralls-image]][coveralls-url]
+
+Determine address of proxied request
+
+## Install
+
+This is a [Node.js](https://nodejs.org/en/) module available through the
+[npm registry](https://www.npmjs.com/). Installation is done using the
+[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
+
+```sh
+$ npm install proxy-addr
+```
+
+## API
+
+```js
+var proxyaddr = require('proxy-addr')
+```
+
+### proxyaddr(req, trust)
+
+Return the address of the request, using the given `trust` parameter.
+
+The `trust` argument is a function that returns `true` if you trust
+the address, `false` if you don't. The closest untrusted address is
+returned.
+
+```js
+proxyaddr(req, function(addr){ return addr === '127.0.0.1' })
+proxyaddr(req, function(addr, i){ return i < 1 })
+```
+
+The `trust` arugment may also be a single IP address string or an
+array of trusted addresses, as plain IP addresses, CIDR-formatted
+strings, or IP/netmask strings.
+
+```js
+proxyaddr(req, '127.0.0.1')
+proxyaddr(req, ['127.0.0.0/8', '10.0.0.0/8'])
+proxyaddr(req, ['127.0.0.0/255.0.0.0', '192.168.0.0/255.255.0.0'])
+```
+
+This module also supports IPv6. Your IPv6 addresses will be normalized
+automatically (i.e. `fe80::00ed:1` equals `fe80:0:0:0:0:0:ed:1`).
+
+```js
+proxyaddr(req, '::1')
+proxyaddr(req, ['::1/128', 'fe80::/10'])
+```
+
+This module will automatically work with IPv4-mapped IPv6 addresses
+as well to support node.js in IPv6-only mode. This means that you do
+not have to specify both `::ffff:a00:1` and `10.0.0.1`.
+
+As a convenience, this module also takes certain pre-defined names
+in addition to IP addresses, which expand into IP addresses:
+
+```js
+proxyaddr(req, 'loopback')
+proxyaddr(req, ['loopback', 'fc00:ac:1ab5:fff::1/64'])
+```
+
+ * `loopback`: IPv4 and IPv6 loopback addresses (like `::1` and
+ `127.0.0.1`).
+ * `linklocal`: IPv4 and IPv6 link-local addresses (like
+ `fe80::1:1:1:1` and `169.254.0.1`).
+ * `uniquelocal`: IPv4 private addresses and IPv6 unique-local
+ addresses (like `fc00:ac:1ab5:fff::1` and `192.168.0.1`).
+
+When `trust` is specified as a function, it will be called for each
+address to determine if it is a trusted address. The function is
+given two arguments: `addr` and `i`, where `addr` is a string of
+the address to check and `i` is a number that represents the distance
+from the socket address.
+
+### proxyaddr.all(req, [trust])
+
+Return all the addresses of the request, optionally stopping at the
+first untrusted. This array is ordered from closest to furthest
+(i.e. `arr[0] === req.connection.remoteAddress`).
+
+```js
+proxyaddr.all(req)
+```
+
+The optional `trust` argument takes the same arguments as `trust`
+does in `proxyaddr(req, trust)`.
+
+```js
+proxyaddr.all(req, 'loopback')
+```
+
+### proxyaddr.compile(val)
+
+Compiles argument `val` into a `trust` function. This function takes
+the same arguments as `trust` does in `proxyaddr(req, trust)` and
+returns a function suitable for `proxyaddr(req, trust)`.
+
+```js
+var trust = proxyaddr.compile('localhost')
+var addr = proxyaddr(req, trust)
+```
+
+This function is meant to be optimized for use against every request.
+It is recommend to compile a trust function up-front for the trusted
+configuration and pass that to `proxyaddr(req, trust)` for each request.
+
+## Testing
+
+```sh
+$ npm test
+```
+
+## Benchmarks
+
+```sh
+$ npm run-script bench
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/proxy-addr.svg
+[npm-url]: https://npmjs.org/package/proxy-addr
+[node-version-image]: https://img.shields.io/node/v/proxy-addr.svg
+[node-version-url]: https://nodejs.org/en/download/
+[travis-image]: https://img.shields.io/travis/jshttp/proxy-addr/master.svg
+[travis-url]: https://travis-ci.org/jshttp/proxy-addr
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/proxy-addr/master.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/proxy-addr?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/proxy-addr.svg
+[downloads-url]: https://npmjs.org/package/proxy-addr
diff --git a/node_modules/proxy-addr/index.js b/node_modules/proxy-addr/index.js
new file mode 100644
index 0000000..2dad636
--- /dev/null
+++ b/node_modules/proxy-addr/index.js
@@ -0,0 +1,325 @@
+/*!
+ * proxy-addr
+ * Copyright(c) 2014-2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = proxyaddr;
+module.exports.all = alladdrs;
+module.exports.compile = compile;
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var forwarded = require('forwarded');
+var ipaddr = require('ipaddr.js');
+
+/**
+ * Variables.
+ * @private
+ */
+
+var digitre = /^[0-9]+$/;
+var isip = ipaddr.isValid;
+var parseip = ipaddr.parse;
+
+/**
+ * Pre-defined IP ranges.
+ * @private
+ */
+
+var ipranges = {
+ linklocal: ['169.254.0.0/16', 'fe80::/10'],
+ loopback: ['127.0.0.1/8', '::1/128'],
+ uniquelocal: ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', 'fc00::/7']
+};
+
+/**
+ * Get all addresses in the request, optionally stopping
+ * at the first untrusted.
+ *
+ * @param {Object} request
+ * @param {Function|Array|String} [trust]
+ * @public
+ */
+
+function alladdrs(req, trust) {
+ // get addresses
+ var addrs = forwarded(req);
+
+ if (!trust) {
+ // Return all addresses
+ return addrs;
+ }
+
+ if (typeof trust !== 'function') {
+ trust = compile(trust);
+ }
+
+ for (var i = 0; i < addrs.length - 1; i++) {
+ if (trust(addrs[i], i)) continue;
+
+ addrs.length = i + 1;
+ }
+
+ return addrs;
+}
+
+/**
+ * Compile argument into trust function.
+ *
+ * @param {Array|String} val
+ * @private
+ */
+
+function compile(val) {
+ if (!val) {
+ throw new TypeError('argument is required');
+ }
+
+ var trust = typeof val === 'string'
+ ? [val]
+ : val;
+
+ if (!Array.isArray(trust)) {
+ throw new TypeError('unsupported trust argument');
+ }
+
+ for (var i = 0; i < trust.length; i++) {
+ val = trust[i];
+
+ if (!ipranges.hasOwnProperty(val)) {
+ continue;
+ }
+
+ // Splice in pre-defined range
+ val = ipranges[val];
+ trust.splice.apply(trust, [i, 1].concat(val));
+ i += val.length - 1;
+ }
+
+ return compileTrust(compileRangeSubnets(trust));
+}
+
+/**
+ * Compile `arr` elements into range subnets.
+ *
+ * @param {Array} arr
+ * @private
+ */
+
+function compileRangeSubnets(arr) {
+ var rangeSubnets = new Array(arr.length);
+
+ for (var i = 0; i < arr.length; i++) {
+ rangeSubnets[i] = parseipNotation(arr[i]);
+ }
+
+ return rangeSubnets;
+}
+
+/**
+ * Compile range subnet array into trust function.
+ *
+ * @param {Array} rangeSubnets
+ * @private
+ */
+
+function compileTrust(rangeSubnets) {
+ // Return optimized function based on length
+ var len = rangeSubnets.length;
+ return len === 0
+ ? trustNone
+ : len === 1
+ ? trustSingle(rangeSubnets[0])
+ : trustMulti(rangeSubnets);
+}
+
+/**
+ * Parse IP notation string into range subnet.
+ *
+ * @param {String} note
+ * @private
+ */
+
+function parseipNotation(note) {
+ var pos = note.lastIndexOf('/');
+ var str = pos !== -1
+ ? note.substring(0, pos)
+ : note;
+
+ if (!isip(str)) {
+ throw new TypeError('invalid IP address: ' + str);
+ }
+
+ var ip = parseip(str);
+
+ if (pos === -1 && ip.kind() === 'ipv6' && ip.isIPv4MappedAddress()) {
+ // Store as IPv4
+ ip = ip.toIPv4Address();
+ }
+
+ var max = ip.kind() === 'ipv6'
+ ? 128
+ : 32;
+
+ var range = pos !== -1
+ ? note.substring(pos + 1, note.length)
+ : null;
+
+ if (range === null) {
+ range = max;
+ } else if (digitre.test(range)) {
+ range = parseInt(range, 10);
+ } else if (ip.kind() === 'ipv4' && isip(range)) {
+ range = parseNetmask(range);
+ } else {
+ range = null;
+ }
+
+ if (range <= 0 || range > max) {
+ throw new TypeError('invalid range on address: ' + note);
+ }
+
+ return [ip, range];
+}
+
+/**
+ * Parse netmask string into CIDR range.
+ *
+ * @param {String} netmask
+ * @private
+ */
+
+function parseNetmask(netmask) {
+ var ip = parseip(netmask);
+ var kind = ip.kind();
+
+ return kind === 'ipv4'
+ ? ip.prefixLengthFromSubnetMask()
+ : null;
+}
+
+/**
+ * Determine address of proxied request.
+ *
+ * @param {Object} request
+ * @param {Function|Array|String} trust
+ * @public
+ */
+
+function proxyaddr(req, trust) {
+ if (!req) {
+ throw new TypeError('req argument is required');
+ }
+
+ if (!trust) {
+ throw new TypeError('trust argument is required');
+ }
+
+ var addrs = alladdrs(req, trust);
+ var addr = addrs[addrs.length - 1];
+
+ return addr;
+}
+
+/**
+ * Static trust function to trust nothing.
+ *
+ * @private
+ */
+
+function trustNone() {
+ return false;
+}
+
+/**
+ * Compile trust function for multiple subnets.
+ *
+ * @param {Array} subnets
+ * @private
+ */
+
+function trustMulti(subnets) {
+ return function trust(addr) {
+ if (!isip(addr)) return false;
+
+ var ip = parseip(addr);
+ var ipconv;
+ var kind = ip.kind();
+
+ for (var i = 0; i < subnets.length; i++) {
+ var subnet = subnets[i];
+ var subnetip = subnet[0];
+ var subnetkind = subnetip.kind();
+ var subnetrange = subnet[1];
+ var trusted = ip;
+
+ if (kind !== subnetkind) {
+ if (subnetkind === 'ipv4' && !ip.isIPv4MappedAddress()) {
+ // Incompatible IP addresses
+ continue;
+ }
+
+ if (!ipconv) {
+ // Convert IP to match subnet IP kind
+ ipconv = subnetkind === 'ipv4'
+ ? ip.toIPv4Address()
+ : ip.toIPv4MappedAddress();
+ }
+
+ trusted = ipconv;
+ }
+
+ if (trusted.match(subnetip, subnetrange)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+
+/**
+ * Compile trust function for single subnet.
+ *
+ * @param {Object} subnet
+ * @private
+ */
+
+function trustSingle(subnet) {
+ var subnetip = subnet[0];
+ var subnetkind = subnetip.kind();
+ var subnetisipv4 = subnetkind === 'ipv4';
+ var subnetrange = subnet[1];
+
+ return function trust(addr) {
+ if (!isip(addr)) return false;
+
+ var ip = parseip(addr);
+ var kind = ip.kind();
+
+ if (kind !== subnetkind) {
+ if (subnetisipv4 && !ip.isIPv4MappedAddress()) {
+ // Incompatible IP addresses
+ return false;
+ }
+
+ // Convert IP to match subnet IP kind
+ ip = subnetisipv4
+ ? ip.toIPv4Address()
+ : ip.toIPv4MappedAddress();
+ }
+
+ return ip.match(subnetip, subnetrange);
+ };
+}
diff --git a/node_modules/proxy-addr/package.json b/node_modules/proxy-addr/package.json
new file mode 100644
index 0000000..c6a55fd
--- /dev/null
+++ b/node_modules/proxy-addr/package.json
@@ -0,0 +1,108 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "proxy-addr@~1.1.3",
+ "scope": null,
+ "escapedName": "proxy-addr",
+ "name": "proxy-addr",
+ "rawSpec": "~1.1.3",
+ "spec": ">=1.1.3 <1.2.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express"
+ ]
+ ],
+ "_from": "proxy-addr@>=1.1.3 <1.2.0",
+ "_id": "proxy-addr@1.1.4",
+ "_inCache": true,
+ "_location": "/proxy-addr",
+ "_nodeVersion": "4.7.3",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/proxy-addr-1.1.4.tgz_1490396252699_0.9566438721958548"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "2.15.11",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "proxy-addr@~1.1.3",
+ "scope": null,
+ "escapedName": "proxy-addr",
+ "name": "proxy-addr",
+ "rawSpec": "~1.1.3",
+ "spec": ">=1.1.3 <1.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/express"
+ ],
+ "_resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz",
+ "_shasum": "27e545f6960a44a627d9b44467e35c1b6b4ce2f3",
+ "_shrinkwrap": null,
+ "_spec": "proxy-addr@~1.1.3",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express",
+ "author": {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "bugs": {
+ "url": "https://github.com/jshttp/proxy-addr/issues"
+ },
+ "dependencies": {
+ "forwarded": "~0.1.0",
+ "ipaddr.js": "1.3.0"
+ },
+ "description": "Determine address of proxied request",
+ "devDependencies": {
+ "beautify-benchmark": "0.2.4",
+ "benchmark": "2.1.3",
+ "istanbul": "0.4.5",
+ "mocha": "~1.21.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "27e545f6960a44a627d9b44467e35c1b6b4ce2f3",
+ "tarball": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "LICENSE",
+ "HISTORY.md",
+ "README.md",
+ "index.js"
+ ],
+ "gitHead": "4c636264c036d9825e8a3cf50555a272e3246fe6",
+ "homepage": "https://github.com/jshttp/proxy-addr#readme",
+ "keywords": [
+ "ip",
+ "proxy",
+ "x-forwarded-for"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ }
+ ],
+ "name": "proxy-addr",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jshttp/proxy-addr.git"
+ },
+ "scripts": {
+ "bench": "node benchmark/index.js",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/"
+ },
+ "version": "1.1.4"
+}
diff --git a/node_modules/pseudomap/LICENSE b/node_modules/pseudomap/LICENSE
new file mode 100644
index 0000000..19129e3
--- /dev/null
+++ b/node_modules/pseudomap/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+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/node_modules/pseudomap/README.md b/node_modules/pseudomap/README.md
new file mode 100644
index 0000000..778bf01
--- /dev/null
+++ b/node_modules/pseudomap/README.md
@@ -0,0 +1,60 @@
+# pseudomap
+
+A thing that is a lot like ES6 `Map`, but without iterators, for use
+in environments where `for..of` syntax and `Map` are not available.
+
+If you need iterators, or just in general a more faithful polyfill to
+ES6 Maps, check out [es6-map](http://npm.im/es6-map).
+
+If you are in an environment where `Map` is supported, then that will
+be returned instead, unless `process.env.TEST_PSEUDOMAP` is set.
+
+You can use any value as keys, and any value as data. Setting again
+with the identical key will overwrite the previous value.
+
+Internally, data is stored on an `Object.create(null)` style object.
+The key is coerced to a string to generate the key on the internal
+data-bag object. The original key used is stored along with the data.
+
+In the event of a stringified-key collision, a new key is generated by
+appending an increasing number to the stringified-key until finding
+either the intended key or an empty spot.
+
+Note that because object traversal order of plain objects is not
+guaranteed to be identical to insertion order, the insertion order
+guarantee of `Map.prototype.forEach` is not guaranteed in this
+implementation. However, in all versions of Node.js and V8 where this
+module works, `forEach` does traverse data in insertion order.
+
+## API
+
+Most of the [Map
+API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map),
+with the following exceptions:
+
+1. A `Map` object is not an iterator.
+2. `values`, `keys`, and `entries` methods are not implemented,
+ because they return iterators.
+3. The argument to the constructor can be an Array of `[key, value]`
+ pairs, or a `Map` or `PseudoMap` object. But, since iterators
+ aren't used, passing any plain-old iterator won't initialize the
+ map properly.
+
+## USAGE
+
+Use just like a regular ES6 Map.
+
+```javascript
+var PseudoMap = require('pseudomap')
+
+// optionally provide a pseudomap, or an array of [key,value] pairs
+// as the argument to initialize the map with
+var myMap = new PseudoMap()
+
+myMap.set(1, 'number 1')
+myMap.set('1', 'string 1')
+var akey = {}
+var bkey = {}
+myMap.set(akey, { some: 'data' })
+myMap.set(bkey, { some: 'other data' })
+```
diff --git a/node_modules/pseudomap/map.js b/node_modules/pseudomap/map.js
new file mode 100644
index 0000000..7db1599
--- /dev/null
+++ b/node_modules/pseudomap/map.js
@@ -0,0 +1,9 @@
+if (process.env.npm_package_name === 'pseudomap' &&
+ process.env.npm_lifecycle_script === 'test')
+ process.env.TEST_PSEUDOMAP = 'true'
+
+if (typeof Map === 'function' && !process.env.TEST_PSEUDOMAP) {
+ module.exports = Map
+} else {
+ module.exports = require('./pseudomap')
+}
diff --git a/node_modules/pseudomap/package.json b/node_modules/pseudomap/package.json
new file mode 100644
index 0000000..e4ebc39
--- /dev/null
+++ b/node_modules/pseudomap/package.json
@@ -0,0 +1,86 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "pseudomap@^1.0.1",
+ "scope": null,
+ "escapedName": "pseudomap",
+ "name": "pseudomap",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lru-cache"
+ ]
+ ],
+ "_from": "pseudomap@>=1.0.1 <2.0.0",
+ "_id": "pseudomap@1.0.2",
+ "_inCache": true,
+ "_location": "/pseudomap",
+ "_nodeVersion": "4.0.0",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ "_npmVersion": "3.3.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "pseudomap@^1.0.1",
+ "scope": null,
+ "escapedName": "pseudomap",
+ "name": "pseudomap",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/editorconfig/lru-cache",
+ "/lru-cache"
+ ],
+ "_resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "_shasum": "f052a28da70e618917ef0a8ac34c1ae5a68286b3",
+ "_shrinkwrap": null,
+ "_spec": "pseudomap@^1.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/lru-cache",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/pseudomap/issues"
+ },
+ "dependencies": {},
+ "description": "A thing that is a lot like ES6 `Map`, but without iterators, for use in environments where `for..of` syntax and `Map` are not available.",
+ "devDependencies": {
+ "tap": "^2.3.1"
+ },
+ "directories": {
+ "test": "test"
+ },
+ "dist": {
+ "shasum": "f052a28da70e618917ef0a8ac34c1ae5a68286b3",
+ "tarball": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"
+ },
+ "gitHead": "b6dc728207a0321ede6479e34506d3e0e13a940b",
+ "homepage": "https://github.com/isaacs/pseudomap#readme",
+ "license": "ISC",
+ "main": "map.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ }
+ ],
+ "name": "pseudomap",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/pseudomap.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "1.0.2"
+}
diff --git a/node_modules/pseudomap/pseudomap.js b/node_modules/pseudomap/pseudomap.js
new file mode 100644
index 0000000..25a21d8
--- /dev/null
+++ b/node_modules/pseudomap/pseudomap.js
@@ -0,0 +1,113 @@
+var hasOwnProperty = Object.prototype.hasOwnProperty
+
+module.exports = PseudoMap
+
+function PseudoMap (set) {
+ if (!(this instanceof PseudoMap)) // whyyyyyyy
+ throw new TypeError("Constructor PseudoMap requires 'new'")
+
+ this.clear()
+
+ if (set) {
+ if ((set instanceof PseudoMap) ||
+ (typeof Map === 'function' && set instanceof Map))
+ set.forEach(function (value, key) {
+ this.set(key, value)
+ }, this)
+ else if (Array.isArray(set))
+ set.forEach(function (kv) {
+ this.set(kv[0], kv[1])
+ }, this)
+ else
+ throw new TypeError('invalid argument')
+ }
+}
+
+PseudoMap.prototype.forEach = function (fn, thisp) {
+ thisp = thisp || this
+ Object.keys(this._data).forEach(function (k) {
+ if (k !== 'size')
+ fn.call(thisp, this._data[k].value, this._data[k].key)
+ }, this)
+}
+
+PseudoMap.prototype.has = function (k) {
+ return !!find(this._data, k)
+}
+
+PseudoMap.prototype.get = function (k) {
+ var res = find(this._data, k)
+ return res && res.value
+}
+
+PseudoMap.prototype.set = function (k, v) {
+ set(this._data, k, v)
+}
+
+PseudoMap.prototype.delete = function (k) {
+ var res = find(this._data, k)
+ if (res) {
+ delete this._data[res._index]
+ this._data.size--
+ }
+}
+
+PseudoMap.prototype.clear = function () {
+ var data = Object.create(null)
+ data.size = 0
+
+ Object.defineProperty(this, '_data', {
+ value: data,
+ enumerable: false,
+ configurable: true,
+ writable: false
+ })
+}
+
+Object.defineProperty(PseudoMap.prototype, 'size', {
+ get: function () {
+ return this._data.size
+ },
+ set: function (n) {},
+ enumerable: true,
+ configurable: true
+})
+
+PseudoMap.prototype.values =
+PseudoMap.prototype.keys =
+PseudoMap.prototype.entries = function () {
+ throw new Error('iterators are not implemented in this version')
+}
+
+// Either identical, or both NaN
+function same (a, b) {
+ return a === b || a !== a && b !== b
+}
+
+function Entry (k, v, i) {
+ this.key = k
+ this.value = v
+ this._index = i
+}
+
+function find (data, k) {
+ for (var i = 0, s = '_' + k, key = s;
+ hasOwnProperty.call(data, key);
+ key = s + i++) {
+ if (same(data[key].key, k))
+ return data[key]
+ }
+}
+
+function set (data, k, v) {
+ for (var i = 0, s = '_' + k, key = s;
+ hasOwnProperty.call(data, key);
+ key = s + i++) {
+ if (same(data[key].key, k)) {
+ data[key].value = v
+ return
+ }
+ }
+ data.size++
+ data[key] = new Entry(k, v, key)
+}
diff --git a/node_modules/pseudomap/test/basic.js b/node_modules/pseudomap/test/basic.js
new file mode 100644
index 0000000..4378e45
--- /dev/null
+++ b/node_modules/pseudomap/test/basic.js
@@ -0,0 +1,86 @@
+var t = require('tap')
+
+process.env.TEST_PSEUDOMAP = 'true'
+
+var PM = require('../')
+runTests(PM)
+
+// if possible, verify that Map also behaves the same way
+if (typeof Map === 'function')
+ runTests(Map)
+
+
+function runTests (Map) {
+ t.throws(Map)
+
+ var m = new Map()
+
+ t.equal(m.size, 0)
+
+ m.set(1, '1 string')
+ t.equal(m.get(1), '1 string')
+ t.equal(m.size, 1)
+ m.size = 1000
+ t.equal(m.size, 1)
+ m.size = 0
+ t.equal(m.size, 1)
+
+ m = new Map([[1, 'number 1'], ['1', 'string 1']])
+ t.equal(m.get(1), 'number 1')
+ t.equal(m.get('1'), 'string 1')
+ t.equal(m.size, 2)
+
+ m = new Map(m)
+ t.equal(m.get(1), 'number 1')
+ t.equal(m.get('1'), 'string 1')
+ t.equal(m.size, 2)
+
+ var akey = {}
+ var bkey = {}
+ m.set(akey, { some: 'data' })
+ m.set(bkey, { some: 'other data' })
+ t.same(m.get(akey), { some: 'data' })
+ t.same(m.get(bkey), { some: 'other data' })
+ t.equal(m.size, 4)
+
+ var x = /x/
+ var y = /x/
+ m.set(x, 'x regex')
+ m.set(y, 'y regex')
+ t.equal(m.get(x), 'x regex')
+ m.set(x, 'x again')
+ t.equal(m.get(x), 'x again')
+ t.equal(m.size, 6)
+
+ m.set(NaN, 'not a number')
+ t.equal(m.get(NaN), 'not a number')
+ m.set(NaN, 'it is a ' + typeof NaN)
+ t.equal(m.get(NaN), 'it is a number')
+ m.set('NaN', 'stringie nan')
+ t.equal(m.get(NaN), 'it is a number')
+ t.equal(m.get('NaN'), 'stringie nan')
+ t.equal(m.size, 8)
+
+ m.delete(NaN)
+ t.equal(m.get(NaN), undefined)
+ t.equal(m.size, 7)
+
+ var expect = [
+ { value: 'number 1', key: 1 },
+ { value: 'string 1', key: '1' },
+ { value: { some: 'data' }, key: {} },
+ { value: { some: 'other data' }, key: {} },
+ { value: 'x again', key: /x/ },
+ { value: 'y regex', key: /x/ },
+ { value: 'stringie nan', key: 'NaN' }
+ ]
+ var actual = []
+
+ m.forEach(function (value, key) {
+ actual.push({ value: value, key: key })
+ })
+ t.same(actual, expect)
+
+ m.clear()
+ t.equal(m.size, 0)
+}
diff --git a/node_modules/qs/.eslintignore b/node_modules/qs/.eslintignore
new file mode 100644
index 0000000..1521c8b
--- /dev/null
+++ b/node_modules/qs/.eslintignore
@@ -0,0 +1 @@
+dist
diff --git a/node_modules/qs/.eslintrc b/node_modules/qs/.eslintrc
new file mode 100644
index 0000000..1faac27
--- /dev/null
+++ b/node_modules/qs/.eslintrc
@@ -0,0 +1,19 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "complexity": [2, 22],
+ "consistent-return": [1],
+ "id-length": [2, { "min": 1, "max": 25, "properties": "never" }],
+ "indent": [2, 4],
+ "max-params": [2, 9],
+ "max-statements": [2, 36],
+ "no-extra-parens": [1],
+ "no-continue": [1],
+ "no-magic-numbers": 0,
+ "no-restricted-syntax": [2, "BreakStatement", "DebuggerStatement", "ForInStatement", "LabeledStatement", "WithStatement"],
+ "operator-linebreak": 1
+ }
+}
diff --git a/node_modules/qs/CHANGELOG.md b/node_modules/qs/CHANGELOG.md
new file mode 100644
index 0000000..86bea76
--- /dev/null
+++ b/node_modules/qs/CHANGELOG.md
@@ -0,0 +1,130 @@
+## **6.2.1**
+- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values
+- [Refactor] Be explicit and use `Object.prototype.hasOwnProperty.call`
+- [Tests] remove `parallelshell` since it does not reliably report failures
+- [Tests] up to `node` `v6.3`, `v5.12`
+- [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`, `qs-iconv`
+
+## [**6.2.0**](https://github.com/ljharb/qs/issues?milestone=36&state=closed)
+- [New] pass Buffers to the encoder/decoder directly (#161)
+- [New] add "encoder" and "decoder" options, for custom param encoding/decoding (#160)
+- [Fix] fix compacting of nested sparse arrays (#150)
+
+## [**6.1.0**](https://github.com/ljharb/qs/issues?milestone=35&state=closed)
+- [New] allowDots option for `stringify` (#151)
+- [Fix] "sort" option should work at a depth of 3 or more (#151)
+- [Fix] Restore `dist` directory; will be removed in v7 (#148)
+
+## [**6.0.2**](https://github.com/ljharb/qs/issues?milestone=33&state=closed)
+- Revert ES6 requirement and restore support for node down to v0.8.
+
+## [**6.0.1**](https://github.com/ljharb/qs/issues?milestone=32&state=closed)
+- [**#127**](https://github.com/ljharb/qs/pull/127) Fix engines definition in package.json
+
+## [**6.0.0**](https://github.com/ljharb/qs/issues?milestone=31&state=closed)
+- [**#124**](https://github.com/ljharb/qs/issues/124) Use ES6 and drop support for node < v4
+
+## **5.2.1**
+- [Fix] ensure `key[]=x&key[]&key[]=y` results in 3, not 2, values
+
+## [**5.2.0**](https://github.com/ljharb/qs/issues?milestone=30&state=closed)
+- [**#64**](https://github.com/ljharb/qs/issues/64) Add option to sort object keys in the query string
+
+## [**5.1.0**](https://github.com/ljharb/qs/issues?milestone=29&state=closed)
+- [**#117**](https://github.com/ljharb/qs/issues/117) make URI encoding stringified results optional
+- [**#106**](https://github.com/ljharb/qs/issues/106) Add flag `skipNulls` to optionally skip null values in stringify
+
+## [**5.0.0**](https://github.com/ljharb/qs/issues?milestone=28&state=closed)
+- [**#114**](https://github.com/ljharb/qs/issues/114) default allowDots to false
+- [**#100**](https://github.com/ljharb/qs/issues/100) include dist to npm
+
+## [**4.0.0**](https://github.com/ljharb/qs/issues?milestone=26&state=closed)
+- [**#98**](https://github.com/ljharb/qs/issues/98) make returning plain objects and allowing prototype overwriting properties optional
+
+## [**3.1.0**](https://github.com/ljharb/qs/issues?milestone=24&state=closed)
+- [**#89**](https://github.com/ljharb/qs/issues/89) Add option to disable "Transform dot notation to bracket notation"
+
+## [**3.0.0**](https://github.com/ljharb/qs/issues?milestone=23&state=closed)
+- [**#80**](https://github.com/ljharb/qs/issues/80) qs.parse silently drops properties
+- [**#77**](https://github.com/ljharb/qs/issues/77) Perf boost
+- [**#60**](https://github.com/ljharb/qs/issues/60) Add explicit option to disable array parsing
+- [**#74**](https://github.com/ljharb/qs/issues/74) Bad parse when turning array into object
+- [**#81**](https://github.com/ljharb/qs/issues/81) Add a `filter` option
+- [**#68**](https://github.com/ljharb/qs/issues/68) Fixed issue with recursion and passing strings into objects.
+- [**#66**](https://github.com/ljharb/qs/issues/66) Add mixed array and object dot notation support Closes: #47
+- [**#76**](https://github.com/ljharb/qs/issues/76) RFC 3986
+- [**#85**](https://github.com/ljharb/qs/issues/85) No equal sign
+- [**#84**](https://github.com/ljharb/qs/issues/84) update license attribute
+
+## [**2.4.1**](https://github.com/ljharb/qs/issues?milestone=20&state=closed)
+- [**#73**](https://github.com/ljharb/qs/issues/73) Property 'hasOwnProperty' of object # is not a function
+
+## [**2.4.0**](https://github.com/ljharb/qs/issues?milestone=19&state=closed)
+- [**#70**](https://github.com/ljharb/qs/issues/70) Add arrayFormat option
+
+## [**2.3.3**](https://github.com/ljharb/qs/issues?milestone=18&state=closed)
+- [**#59**](https://github.com/ljharb/qs/issues/59) make sure array indexes are >= 0, closes #57
+- [**#58**](https://github.com/ljharb/qs/issues/58) make qs usable for browser loader
+
+## [**2.3.2**](https://github.com/ljharb/qs/issues?milestone=17&state=closed)
+- [**#55**](https://github.com/ljharb/qs/issues/55) allow merging a string into an object
+
+## [**2.3.1**](https://github.com/ljharb/qs/issues?milestone=16&state=closed)
+- [**#52**](https://github.com/ljharb/qs/issues/52) Return "undefined" and "false" instead of throwing "TypeError".
+
+## [**2.3.0**](https://github.com/ljharb/qs/issues?milestone=15&state=closed)
+- [**#50**](https://github.com/ljharb/qs/issues/50) add option to omit array indices, closes #46
+
+## [**2.2.5**](https://github.com/ljharb/qs/issues?milestone=14&state=closed)
+- [**#39**](https://github.com/ljharb/qs/issues/39) Is there an alternative to Buffer.isBuffer?
+- [**#49**](https://github.com/ljharb/qs/issues/49) refactor utils.merge, fixes #45
+- [**#41**](https://github.com/ljharb/qs/issues/41) avoid browserifying Buffer, for #39
+
+## [**2.2.4**](https://github.com/ljharb/qs/issues?milestone=13&state=closed)
+- [**#38**](https://github.com/ljharb/qs/issues/38) how to handle object keys beginning with a number
+
+## [**2.2.3**](https://github.com/ljharb/qs/issues?milestone=12&state=closed)
+- [**#37**](https://github.com/ljharb/qs/issues/37) parser discards first empty value in array
+- [**#36**](https://github.com/ljharb/qs/issues/36) Update to lab 4.x
+
+## [**2.2.2**](https://github.com/ljharb/qs/issues?milestone=11&state=closed)
+- [**#33**](https://github.com/ljharb/qs/issues/33) Error when plain object in a value
+- [**#34**](https://github.com/ljharb/qs/issues/34) use Object.prototype.hasOwnProperty.call instead of obj.hasOwnProperty
+- [**#24**](https://github.com/ljharb/qs/issues/24) Changelog? Semver?
+
+## [**2.2.1**](https://github.com/ljharb/qs/issues?milestone=10&state=closed)
+- [**#32**](https://github.com/ljharb/qs/issues/32) account for circular references properly, closes #31
+- [**#31**](https://github.com/ljharb/qs/issues/31) qs.parse stackoverflow on circular objects
+
+## [**2.2.0**](https://github.com/ljharb/qs/issues?milestone=9&state=closed)
+- [**#26**](https://github.com/ljharb/qs/issues/26) Don't use Buffer global if it's not present
+- [**#30**](https://github.com/ljharb/qs/issues/30) Bug when merging non-object values into arrays
+- [**#29**](https://github.com/ljharb/qs/issues/29) Don't call Utils.clone at the top of Utils.merge
+- [**#23**](https://github.com/ljharb/qs/issues/23) Ability to not limit parameters?
+
+## [**2.1.0**](https://github.com/ljharb/qs/issues?milestone=8&state=closed)
+- [**#22**](https://github.com/ljharb/qs/issues/22) Enable using a RegExp as delimiter
+
+## [**2.0.0**](https://github.com/ljharb/qs/issues?milestone=7&state=closed)
+- [**#18**](https://github.com/ljharb/qs/issues/18) Why is there arrayLimit?
+- [**#20**](https://github.com/ljharb/qs/issues/20) Configurable parametersLimit
+- [**#21**](https://github.com/ljharb/qs/issues/21) make all limits optional, for #18, for #20
+
+## [**1.2.2**](https://github.com/ljharb/qs/issues?milestone=6&state=closed)
+- [**#19**](https://github.com/ljharb/qs/issues/19) Don't overwrite null values
+
+## [**1.2.1**](https://github.com/ljharb/qs/issues?milestone=5&state=closed)
+- [**#16**](https://github.com/ljharb/qs/issues/16) ignore non-string delimiters
+- [**#15**](https://github.com/ljharb/qs/issues/15) Close code block
+
+## [**1.2.0**](https://github.com/ljharb/qs/issues?milestone=4&state=closed)
+- [**#12**](https://github.com/ljharb/qs/issues/12) Add optional delim argument
+- [**#13**](https://github.com/ljharb/qs/issues/13) fix #11: flattened keys in array are now correctly parsed
+
+## [**1.1.0**](https://github.com/ljharb/qs/issues?milestone=3&state=closed)
+- [**#7**](https://github.com/ljharb/qs/issues/7) Empty values of a POST array disappear after being submitted
+- [**#9**](https://github.com/ljharb/qs/issues/9) Should not omit equals signs (=) when value is null
+- [**#6**](https://github.com/ljharb/qs/issues/6) Minor grammar fix in README
+
+## [**1.0.2**](https://github.com/ljharb/qs/issues?milestone=2&state=closed)
+- [**#5**](https://github.com/ljharb/qs/issues/5) array holes incorrectly copied into object on large index
diff --git a/node_modules/qs/CONTRIBUTING.md b/node_modules/qs/CONTRIBUTING.md
new file mode 100644
index 0000000..8928361
--- /dev/null
+++ b/node_modules/qs/CONTRIBUTING.md
@@ -0,0 +1 @@
+Please view our [hapijs contributing guide](https://github.com/hapijs/hapi/blob/master/CONTRIBUTING.md).
diff --git a/node_modules/qs/LICENSE b/node_modules/qs/LICENSE
new file mode 100644
index 0000000..d456948
--- /dev/null
+++ b/node_modules/qs/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2014 Nathan LaFreniere and other contributors.
+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.
+ * The names of any contributors may not 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 THE COPYRIGHT HOLDERS AND 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 complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors
diff --git a/node_modules/qs/README.md b/node_modules/qs/README.md
new file mode 100644
index 0000000..97e3907
--- /dev/null
+++ b/node_modules/qs/README.md
@@ -0,0 +1,376 @@
+# qs
+
+A querystring parsing and stringifying library with some added security.
+
+[](http://travis-ci.org/ljharb/qs)
+
+Lead Maintainer: [Jordan Harband](https://github.com/ljharb)
+
+The **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring).
+
+## Usage
+
+```javascript
+var qs = require('qs');
+var assert = require('assert');
+
+var obj = qs.parse('a=c');
+assert.deepEqual(obj, { a: 'c' });
+
+var str = qs.stringify(obj);
+assert.equal(str, 'a=c');
+```
+
+### Parsing Objects
+
+[](#preventEval)
+```javascript
+qs.parse(string, [options]);
+```
+
+**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`.
+For example, the string `'foo[bar]=baz'` converts to:
+
+```javascript
+assert.deepEqual(qs.parse('foo[bar]=baz'), {
+ foo: {
+ bar: 'baz'
+ }
+});
+```
+
+When using the `plainObjects` option the parsed value is returned as a plain object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like:
+
+```javascript
+var plainObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true });
+assert.deepEqual(plainObject, { a: { hasOwnProperty: 'b' } });
+```
+
+By default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties. *WARNING* It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten. Always be careful with this option.
+
+```javascript
+var protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true });
+assert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } });
+```
+
+URI encoded strings work too:
+
+```javascript
+assert.deepEqual(qs.parse('a%5Bb%5D=c'), {
+ a: { b: 'c' }
+});
+```
+
+You can also nest your objects, like `'foo[bar][baz]=foobarbaz'`:
+
+```javascript
+assert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), {
+ foo: {
+ bar: {
+ baz: 'foobarbaz'
+ }
+ }
+});
+```
+
+By default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like
+`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be:
+
+```javascript
+var expected = {
+ a: {
+ b: {
+ c: {
+ d: {
+ e: {
+ f: {
+ '[g][h][i]': 'j'
+ }
+ }
+ }
+ }
+ }
+ }
+};
+var string = 'a[b][c][d][e][f][g][h][i]=j';
+assert.deepEqual(qs.parse(string), expected);
+```
+
+This depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`:
+
+```javascript
+var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 });
+assert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } });
+```
+
+The depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.
+
+For similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option:
+
+```javascript
+var limited = qs.parse('a=b&c=d', { parameterLimit: 1 });
+assert.deepEqual(limited, { a: 'b' });
+```
+
+An optional delimiter can also be passed:
+
+```javascript
+var delimited = qs.parse('a=b;c=d', { delimiter: ';' });
+assert.deepEqual(delimited, { a: 'b', c: 'd' });
+```
+
+Delimiters can be a regular expression too:
+
+```javascript
+var regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ });
+assert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' });
+```
+
+Option `allowDots` can be used to enable dot notation:
+
+```javascript
+var withDots = qs.parse('a.b=c', { allowDots: true });
+assert.deepEqual(withDots, { a: { b: 'c' } });
+```
+
+### Parsing Arrays
+
+**qs** can also parse arrays using a similar `[]` notation:
+
+```javascript
+var withArray = qs.parse('a[]=b&a[]=c');
+assert.deepEqual(withArray, { a: ['b', 'c'] });
+```
+
+You may specify an index as well:
+
+```javascript
+var withIndexes = qs.parse('a[1]=c&a[0]=b');
+assert.deepEqual(withIndexes, { a: ['b', 'c'] });
+```
+
+Note that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number
+to create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving
+their order:
+
+```javascript
+var noSparse = qs.parse('a[1]=b&a[15]=c');
+assert.deepEqual(noSparse, { a: ['b', 'c'] });
+```
+
+Note that an empty string is also a value, and will be preserved:
+
+```javascript
+var withEmptyString = qs.parse('a[]=&a[]=b');
+assert.deepEqual(withEmptyString, { a: ['', 'b'] });
+
+var withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c');
+assert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] });
+```
+
+**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will
+instead be converted to an object with the index as the key:
+
+```javascript
+var withMaxIndex = qs.parse('a[100]=b');
+assert.deepEqual(withMaxIndex, { a: { '100': 'b' } });
+```
+
+This limit can be overridden by passing an `arrayLimit` option:
+
+```javascript
+var withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 });
+assert.deepEqual(withArrayLimit, { a: { '1': 'b' } });
+```
+
+To disable array parsing entirely, set `parseArrays` to `false`.
+
+```javascript
+var noParsingArrays = qs.parse('a[]=b', { parseArrays: false });
+assert.deepEqual(noParsingArrays, { a: { '0': 'b' } });
+```
+
+If you mix notations, **qs** will merge the two items into an object:
+
+```javascript
+var mixedNotation = qs.parse('a[0]=b&a[b]=c');
+assert.deepEqual(mixedNotation, { a: { '0': 'b', b: 'c' } });
+```
+
+You can also create arrays of objects:
+
+```javascript
+var arraysOfObjects = qs.parse('a[][b]=c');
+assert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] });
+```
+
+### Stringifying
+
+[](#preventEval)
+```javascript
+qs.stringify(object, [options]);
+```
+
+When stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect:
+
+```javascript
+assert.equal(qs.stringify({ a: 'b' }), 'a=b');
+assert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
+```
+
+This encoding can be disabled by setting the `encode` option to `false`:
+
+```javascript
+var unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false });
+assert.equal(unencoded, 'a[b]=c');
+```
+
+This encoding can also be replaced by a custom encoding method set as `encoder` option:
+
+```javascript
+var encoded = qs.stringify({ a: { b: 'c' } }, { encoder: function (str) {
+ // Passed in values `a`, `b`, `c`
+ return // Return encoded string
+}})
+```
+
+_(Note: the `encoder` option does not apply if `encode` is `false`)_
+
+Analogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values:
+
+```javascript
+var decoded = qs.parse('x=z', { decoder: function (str) {
+ // Passed in values `x`, `z`
+ return // Return decoded string
+}})
+```
+
+Examples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage.
+
+When arrays are stringified, by default they are given explicit indices:
+
+```javascript
+qs.stringify({ a: ['b', 'c', 'd'] });
+// 'a[0]=b&a[1]=c&a[2]=d'
+```
+
+You may override this by setting the `indices` option to `false`:
+
+```javascript
+qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
+// 'a=b&a=c&a=d'
+```
+
+You may use the `arrayFormat` option to specify the format of the output array
+
+```javascript
+qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
+// 'a[0]=b&a[1]=c'
+qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
+// 'a[]=b&a[]=c'
+qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
+// 'a=b&a=c'
+```
+
+Empty strings and null values will omit the value, but the equals sign (=) remains in place:
+
+```javascript
+assert.equal(qs.stringify({ a: '' }), 'a=');
+```
+
+Properties that are set to `undefined` will be omitted entirely:
+
+```javascript
+assert.equal(qs.stringify({ a: null, b: undefined }), 'a=');
+```
+
+The delimiter may be overridden with stringify as well:
+
+```javascript
+assert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
+```
+
+Finally, you can use the `filter` option to restrict which keys will be included in the stringified output.
+If you pass a function, it will be called for each key to obtain the replacement value. Otherwise, if you
+pass an array, it will be used to select properties and array indices for stringification:
+
+```javascript
+function filterFunc(prefix, value) {
+ if (prefix == 'b') {
+ // Return an `undefined` value to omit a property.
+ return;
+ }
+ if (prefix == 'e[f]') {
+ return value.getTime();
+ }
+ if (prefix == 'e[g][0]') {
+ return value * 2;
+ }
+ return value;
+}
+qs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc });
+// 'a=b&c=d&e[f]=123&e[g][0]=4'
+qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] });
+// 'a=b&e=f'
+qs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] });
+// 'a[0]=b&a[2]=d'
+```
+
+### Handling of `null` values
+
+By default, `null` values are treated like empty strings:
+
+```javascript
+var withNull = qs.stringify({ a: null, b: '' });
+assert.equal(withNull, 'a=&b=');
+```
+
+Parsing does not distinguish between parameters with and without equal signs. Both are converted to empty strings.
+
+```javascript
+var equalsInsensitive = qs.parse('a&b=');
+assert.deepEqual(equalsInsensitive, { a: '', b: '' });
+```
+
+To distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null`
+values have no `=` sign:
+
+```javascript
+var strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true });
+assert.equal(strictNull, 'a&b=');
+```
+
+To parse values without `=` back to `null` use the `strictNullHandling` flag:
+
+```javascript
+var parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true });
+assert.deepEqual(parsedStrictNull, { a: null, b: '' });
+```
+
+To completely skip rendering keys with `null` values, use the `skipNulls` flag:
+
+```javascript
+var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true });
+assert.equal(nullsSkipped, 'a=b');
+```
+
+### Dealing with special character sets
+
+By default the encoding and decoding of characters is done in `utf-8`. If you
+wish to encode querystrings to a different character set (i.e.
+[Shift JIS](https://en.wikipedia.org/wiki/Shift_JIS)) you can use the
+[`qs-iconv`](https://github.com/martinheidegger/qs-iconv) library:
+
+```javascript
+var encoder = require('qs-iconv/encoder')('shift_jis');
+var shiftJISEncoded = qs.stringify({ a: 'こんにちは!' }, { encoder: encoder });
+assert.equal(shiftJISEncoded, 'a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I');
+```
+
+This also works for decoding of query strings:
+
+```javascript
+var decoder = require('qs-iconv/decoder')('shift_jis');
+var obj = qs.parse('a=%82%B1%82%F1%82%C9%82%BF%82%CD%81I', { decoder: decoder });
+assert.deepEqual(obj, { a: 'こんにちは!' });
+```
diff --git a/node_modules/qs/dist/qs.js b/node_modules/qs/dist/qs.js
new file mode 100644
index 0000000..fcf825b
--- /dev/null
+++ b/node_modules/qs/dist/qs.js
@@ -0,0 +1,486 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0 &&
+ (options.parseArrays && index <= options.arrayLimit)
+ ) {
+ obj = [];
+ obj[index] = parseObject(chain, val, options);
+ } else {
+ obj[cleanRoot] = parseObject(chain, val, options);
+ }
+ }
+
+ return obj;
+};
+
+var parseKeys = function parseKeys(givenKey, val, options) {
+ if (!givenKey) {
+ return;
+ }
+
+ // Transform dot notation to bracket notation
+ var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey;
+
+ // The regex chunks
+
+ var parent = /^([^\[\]]*)/;
+ var child = /(\[[^\[\]]*\])/g;
+
+ // Get the parent
+
+ var segment = parent.exec(key);
+
+ // Stash the parent if it exists
+
+ var keys = [];
+ if (segment[1]) {
+ // If we aren't using plain objects, optionally prefix keys
+ // that would overwrite object prototype properties
+ if (!options.plainObjects && has.call(Object.prototype, segment[1])) {
+ if (!options.allowPrototypes) {
+ return;
+ }
+ }
+
+ keys.push(segment[1]);
+ }
+
+ // Loop through children appending to the array until we hit depth
+
+ var i = 0;
+ while ((segment = child.exec(key)) !== null && i < options.depth) {
+ i += 1;
+ if (!options.plainObjects && has.call(Object.prototype, segment[1].replace(/\[|\]/g, ''))) {
+ if (!options.allowPrototypes) {
+ continue;
+ }
+ }
+ keys.push(segment[1]);
+ }
+
+ // If there's a remainder, just add whatever is left
+
+ if (segment) {
+ keys.push('[' + key.slice(segment.index) + ']');
+ }
+
+ return parseObject(keys, val, options);
+};
+
+module.exports = function (str, opts) {
+ var options = opts || {};
+
+ if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {
+ throw new TypeError('Decoder has to be a function.');
+ }
+
+ options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;
+ options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;
+ options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;
+ options.parseArrays = options.parseArrays !== false;
+ options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;
+ options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;
+ options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;
+ options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;
+ options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;
+ options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
+
+ if (str === '' || str === null || typeof str === 'undefined') {
+ return options.plainObjects ? Object.create(null) : {};
+ }
+
+ var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
+ var obj = options.plainObjects ? Object.create(null) : {};
+
+ // Iterate over the keys and setup the new object
+
+ var keys = Object.keys(tempObj);
+ for (var i = 0; i < keys.length; ++i) {
+ var key = keys[i];
+ var newObj = parseKeys(key, tempObj[key], options);
+ obj = Utils.merge(obj, newObj, options);
+ }
+
+ return Utils.compact(obj);
+};
+
+},{"./utils":4}],3:[function(require,module,exports){
+'use strict';
+
+var Utils = require('./utils');
+
+var arrayPrefixGenerators = {
+ brackets: function brackets(prefix) {
+ return prefix + '[]';
+ },
+ indices: function indices(prefix, key) {
+ return prefix + '[' + key + ']';
+ },
+ repeat: function repeat(prefix) {
+ return prefix;
+ }
+};
+
+var defaults = {
+ delimiter: '&',
+ strictNullHandling: false,
+ skipNulls: false,
+ encode: true,
+ encoder: Utils.encode
+};
+
+var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots) {
+ var obj = object;
+ if (typeof filter === 'function') {
+ obj = filter(prefix, obj);
+ } else if (obj instanceof Date) {
+ obj = obj.toISOString();
+ } else if (obj === null) {
+ if (strictNullHandling) {
+ return encoder ? encoder(prefix) : prefix;
+ }
+
+ obj = '';
+ }
+
+ if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils.isBuffer(obj)) {
+ if (encoder) {
+ return [encoder(prefix) + '=' + encoder(obj)];
+ }
+ return [prefix + '=' + String(obj)];
+ }
+
+ var values = [];
+
+ if (typeof obj === 'undefined') {
+ return values;
+ }
+
+ var objKeys;
+ if (Array.isArray(filter)) {
+ objKeys = filter;
+ } else {
+ var keys = Object.keys(obj);
+ objKeys = sort ? keys.sort(sort) : keys;
+ }
+
+ for (var i = 0; i < objKeys.length; ++i) {
+ var key = objKeys[i];
+
+ if (skipNulls && obj[key] === null) {
+ continue;
+ }
+
+ if (Array.isArray(obj)) {
+ values = values.concat(stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ } else {
+ values = values.concat(stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ }
+ }
+
+ return values;
+};
+
+module.exports = function (object, opts) {
+ var obj = object;
+ var options = opts || {};
+ var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
+ var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
+ var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
+ var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
+ var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null;
+ var sort = typeof options.sort === 'function' ? options.sort : null;
+ var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
+ var objKeys;
+ var filter;
+
+ if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
+ throw new TypeError('Encoder has to be a function.');
+ }
+
+ if (typeof options.filter === 'function') {
+ filter = options.filter;
+ obj = filter('', obj);
+ } else if (Array.isArray(options.filter)) {
+ objKeys = filter = options.filter;
+ }
+
+ var keys = [];
+
+ if (typeof obj !== 'object' || obj === null) {
+ return '';
+ }
+
+ var arrayFormat;
+ if (options.arrayFormat in arrayPrefixGenerators) {
+ arrayFormat = options.arrayFormat;
+ } else if ('indices' in options) {
+ arrayFormat = options.indices ? 'indices' : 'repeat';
+ } else {
+ arrayFormat = 'indices';
+ }
+
+ var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
+
+ if (!objKeys) {
+ objKeys = Object.keys(obj);
+ }
+
+ if (sort) {
+ objKeys.sort(sort);
+ }
+
+ for (var i = 0; i < objKeys.length; ++i) {
+ var key = objKeys[i];
+
+ if (skipNulls && obj[key] === null) {
+ continue;
+ }
+
+ keys = keys.concat(stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ }
+
+ return keys.join(delimiter);
+};
+
+},{"./utils":4}],4:[function(require,module,exports){
+'use strict';
+
+var hexTable = (function () {
+ var array = new Array(256);
+ for (var i = 0; i < 256; ++i) {
+ array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
+ }
+
+ return array;
+}());
+
+exports.arrayToObject = function (source, options) {
+ var obj = options.plainObjects ? Object.create(null) : {};
+ for (var i = 0; i < source.length; ++i) {
+ if (typeof source[i] !== 'undefined') {
+ obj[i] = source[i];
+ }
+ }
+
+ return obj;
+};
+
+exports.merge = function (target, source, options) {
+ if (!source) {
+ return target;
+ }
+
+ if (typeof source !== 'object') {
+ if (Array.isArray(target)) {
+ target.push(source);
+ } else if (typeof target === 'object') {
+ target[source] = true;
+ } else {
+ return [target, source];
+ }
+
+ return target;
+ }
+
+ if (typeof target !== 'object') {
+ return [target].concat(source);
+ }
+
+ var mergeTarget = target;
+ if (Array.isArray(target) && !Array.isArray(source)) {
+ mergeTarget = exports.arrayToObject(target, options);
+ }
+
+ return Object.keys(source).reduce(function (acc, key) {
+ var value = source[key];
+
+ if (Object.prototype.hasOwnProperty.call(acc, key)) {
+ acc[key] = exports.merge(acc[key], value, options);
+ } else {
+ acc[key] = value;
+ }
+ return acc;
+ }, mergeTarget);
+};
+
+exports.decode = function (str) {
+ try {
+ return decodeURIComponent(str.replace(/\+/g, ' '));
+ } catch (e) {
+ return str;
+ }
+};
+
+exports.encode = function (str) {
+ // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
+ // It has been adapted here for stricter adherence to RFC 3986
+ if (str.length === 0) {
+ return str;
+ }
+
+ var string = typeof str === 'string' ? str : String(str);
+
+ var out = '';
+ for (var i = 0; i < string.length; ++i) {
+ var c = string.charCodeAt(i);
+
+ if (
+ c === 0x2D || // -
+ c === 0x2E || // .
+ c === 0x5F || // _
+ c === 0x7E || // ~
+ (c >= 0x30 && c <= 0x39) || // 0-9
+ (c >= 0x41 && c <= 0x5A) || // a-z
+ (c >= 0x61 && c <= 0x7A) // A-Z
+ ) {
+ out += string.charAt(i);
+ continue;
+ }
+
+ if (c < 0x80) {
+ out = out + hexTable[c];
+ continue;
+ }
+
+ if (c < 0x800) {
+ out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
+ continue;
+ }
+
+ if (c < 0xD800 || c >= 0xE000) {
+ out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
+ continue;
+ }
+
+ i += 1;
+ c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
+ out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)];
+ }
+
+ return out;
+};
+
+exports.compact = function (obj, references) {
+ if (typeof obj !== 'object' || obj === null) {
+ return obj;
+ }
+
+ var refs = references || [];
+ var lookup = refs.indexOf(obj);
+ if (lookup !== -1) {
+ return refs[lookup];
+ }
+
+ refs.push(obj);
+
+ if (Array.isArray(obj)) {
+ var compacted = [];
+
+ for (var i = 0; i < obj.length; ++i) {
+ if (obj[i] && typeof obj[i] === 'object') {
+ compacted.push(exports.compact(obj[i], refs));
+ } else if (typeof obj[i] !== 'undefined') {
+ compacted.push(obj[i]);
+ }
+ }
+
+ return compacted;
+ }
+
+ var keys = Object.keys(obj);
+ for (var j = 0; j < keys.length; ++j) {
+ var key = keys[j];
+ obj[key] = exports.compact(obj[key], refs);
+ }
+
+ return obj;
+};
+
+exports.isRegExp = function (obj) {
+ return Object.prototype.toString.call(obj) === '[object RegExp]';
+};
+
+exports.isBuffer = function (obj) {
+ if (obj === null || typeof obj === 'undefined') {
+ return false;
+ }
+
+ return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
+};
+
+},{}]},{},[1])(1)
+});
\ No newline at end of file
diff --git a/node_modules/qs/lib/index.js b/node_modules/qs/lib/index.js
new file mode 100755
index 0000000..1901959
--- /dev/null
+++ b/node_modules/qs/lib/index.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var Stringify = require('./stringify');
+var Parse = require('./parse');
+
+module.exports = {
+ stringify: Stringify,
+ parse: Parse
+};
diff --git a/node_modules/qs/lib/parse.js b/node_modules/qs/lib/parse.js
new file mode 100755
index 0000000..8b37cb3
--- /dev/null
+++ b/node_modules/qs/lib/parse.js
@@ -0,0 +1,166 @@
+'use strict';
+
+var Utils = require('./utils');
+
+var has = Object.prototype.hasOwnProperty;
+
+var defaults = {
+ delimiter: '&',
+ depth: 5,
+ arrayLimit: 20,
+ parameterLimit: 1000,
+ strictNullHandling: false,
+ plainObjects: false,
+ allowPrototypes: false,
+ allowDots: false,
+ decoder: Utils.decode
+};
+
+var parseValues = function parseValues(str, options) {
+ var obj = {};
+ var parts = str.split(options.delimiter, options.parameterLimit === Infinity ? undefined : options.parameterLimit);
+
+ for (var i = 0; i < parts.length; ++i) {
+ var part = parts[i];
+ var pos = part.indexOf(']=') === -1 ? part.indexOf('=') : part.indexOf(']=') + 1;
+
+ var key, val;
+ if (pos === -1) {
+ key = options.decoder(part);
+ val = options.strictNullHandling ? null : '';
+ } else {
+ key = options.decoder(part.slice(0, pos));
+ val = options.decoder(part.slice(pos + 1));
+ }
+ if (has.call(obj, key)) {
+ obj[key] = [].concat(obj[key]).concat(val);
+ } else {
+ obj[key] = val;
+ }
+ }
+
+ return obj;
+};
+
+var parseObject = function parseObject(chain, val, options) {
+ if (!chain.length) {
+ return val;
+ }
+
+ var root = chain.shift();
+
+ var obj;
+ if (root === '[]') {
+ obj = [];
+ obj = obj.concat(parseObject(chain, val, options));
+ } else {
+ obj = options.plainObjects ? Object.create(null) : {};
+ var cleanRoot = root[0] === '[' && root[root.length - 1] === ']' ? root.slice(1, root.length - 1) : root;
+ var index = parseInt(cleanRoot, 10);
+ if (
+ !isNaN(index) &&
+ root !== cleanRoot &&
+ String(index) === cleanRoot &&
+ index >= 0 &&
+ (options.parseArrays && index <= options.arrayLimit)
+ ) {
+ obj = [];
+ obj[index] = parseObject(chain, val, options);
+ } else {
+ obj[cleanRoot] = parseObject(chain, val, options);
+ }
+ }
+
+ return obj;
+};
+
+var parseKeys = function parseKeys(givenKey, val, options) {
+ if (!givenKey) {
+ return;
+ }
+
+ // Transform dot notation to bracket notation
+ var key = options.allowDots ? givenKey.replace(/\.([^\.\[]+)/g, '[$1]') : givenKey;
+
+ // The regex chunks
+
+ var parent = /^([^\[\]]*)/;
+ var child = /(\[[^\[\]]*\])/g;
+
+ // Get the parent
+
+ var segment = parent.exec(key);
+
+ // Stash the parent if it exists
+
+ var keys = [];
+ if (segment[1]) {
+ // If we aren't using plain objects, optionally prefix keys
+ // that would overwrite object prototype properties
+ if (!options.plainObjects && has.call(Object.prototype, segment[1])) {
+ if (!options.allowPrototypes) {
+ return;
+ }
+ }
+
+ keys.push(segment[1]);
+ }
+
+ // Loop through children appending to the array until we hit depth
+
+ var i = 0;
+ while ((segment = child.exec(key)) !== null && i < options.depth) {
+ i += 1;
+ if (!options.plainObjects && has.call(Object.prototype, segment[1].replace(/\[|\]/g, ''))) {
+ if (!options.allowPrototypes) {
+ continue;
+ }
+ }
+ keys.push(segment[1]);
+ }
+
+ // If there's a remainder, just add whatever is left
+
+ if (segment) {
+ keys.push('[' + key.slice(segment.index) + ']');
+ }
+
+ return parseObject(keys, val, options);
+};
+
+module.exports = function (str, opts) {
+ var options = opts || {};
+
+ if (options.decoder !== null && options.decoder !== undefined && typeof options.decoder !== 'function') {
+ throw new TypeError('Decoder has to be a function.');
+ }
+
+ options.delimiter = typeof options.delimiter === 'string' || Utils.isRegExp(options.delimiter) ? options.delimiter : defaults.delimiter;
+ options.depth = typeof options.depth === 'number' ? options.depth : defaults.depth;
+ options.arrayLimit = typeof options.arrayLimit === 'number' ? options.arrayLimit : defaults.arrayLimit;
+ options.parseArrays = options.parseArrays !== false;
+ options.decoder = typeof options.decoder === 'function' ? options.decoder : defaults.decoder;
+ options.allowDots = typeof options.allowDots === 'boolean' ? options.allowDots : defaults.allowDots;
+ options.plainObjects = typeof options.plainObjects === 'boolean' ? options.plainObjects : defaults.plainObjects;
+ options.allowPrototypes = typeof options.allowPrototypes === 'boolean' ? options.allowPrototypes : defaults.allowPrototypes;
+ options.parameterLimit = typeof options.parameterLimit === 'number' ? options.parameterLimit : defaults.parameterLimit;
+ options.strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
+
+ if (str === '' || str === null || typeof str === 'undefined') {
+ return options.plainObjects ? Object.create(null) : {};
+ }
+
+ var tempObj = typeof str === 'string' ? parseValues(str, options) : str;
+ var obj = options.plainObjects ? Object.create(null) : {};
+
+ // Iterate over the keys and setup the new object
+
+ var keys = Object.keys(tempObj);
+ for (var i = 0; i < keys.length; ++i) {
+ var key = keys[i];
+ var newObj = parseKeys(key, tempObj[key], options);
+ obj = Utils.merge(obj, newObj, options);
+ }
+
+ return Utils.compact(obj);
+};
diff --git a/node_modules/qs/lib/stringify.js b/node_modules/qs/lib/stringify.js
new file mode 100755
index 0000000..6e1c9a2
--- /dev/null
+++ b/node_modules/qs/lib/stringify.js
@@ -0,0 +1,137 @@
+'use strict';
+
+var Utils = require('./utils');
+
+var arrayPrefixGenerators = {
+ brackets: function brackets(prefix) {
+ return prefix + '[]';
+ },
+ indices: function indices(prefix, key) {
+ return prefix + '[' + key + ']';
+ },
+ repeat: function repeat(prefix) {
+ return prefix;
+ }
+};
+
+var defaults = {
+ delimiter: '&',
+ strictNullHandling: false,
+ skipNulls: false,
+ encode: true,
+ encoder: Utils.encode
+};
+
+var stringify = function stringify(object, prefix, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots) {
+ var obj = object;
+ if (typeof filter === 'function') {
+ obj = filter(prefix, obj);
+ } else if (obj instanceof Date) {
+ obj = obj.toISOString();
+ } else if (obj === null) {
+ if (strictNullHandling) {
+ return encoder ? encoder(prefix) : prefix;
+ }
+
+ obj = '';
+ }
+
+ if (typeof obj === 'string' || typeof obj === 'number' || typeof obj === 'boolean' || Utils.isBuffer(obj)) {
+ if (encoder) {
+ return [encoder(prefix) + '=' + encoder(obj)];
+ }
+ return [prefix + '=' + String(obj)];
+ }
+
+ var values = [];
+
+ if (typeof obj === 'undefined') {
+ return values;
+ }
+
+ var objKeys;
+ if (Array.isArray(filter)) {
+ objKeys = filter;
+ } else {
+ var keys = Object.keys(obj);
+ objKeys = sort ? keys.sort(sort) : keys;
+ }
+
+ for (var i = 0; i < objKeys.length; ++i) {
+ var key = objKeys[i];
+
+ if (skipNulls && obj[key] === null) {
+ continue;
+ }
+
+ if (Array.isArray(obj)) {
+ values = values.concat(stringify(obj[key], generateArrayPrefix(prefix, key), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ } else {
+ values = values.concat(stringify(obj[key], prefix + (allowDots ? '.' + key : '[' + key + ']'), generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ }
+ }
+
+ return values;
+};
+
+module.exports = function (object, opts) {
+ var obj = object;
+ var options = opts || {};
+ var delimiter = typeof options.delimiter === 'undefined' ? defaults.delimiter : options.delimiter;
+ var strictNullHandling = typeof options.strictNullHandling === 'boolean' ? options.strictNullHandling : defaults.strictNullHandling;
+ var skipNulls = typeof options.skipNulls === 'boolean' ? options.skipNulls : defaults.skipNulls;
+ var encode = typeof options.encode === 'boolean' ? options.encode : defaults.encode;
+ var encoder = encode ? (typeof options.encoder === 'function' ? options.encoder : defaults.encoder) : null;
+ var sort = typeof options.sort === 'function' ? options.sort : null;
+ var allowDots = typeof options.allowDots === 'undefined' ? false : options.allowDots;
+ var objKeys;
+ var filter;
+
+ if (options.encoder !== null && options.encoder !== undefined && typeof options.encoder !== 'function') {
+ throw new TypeError('Encoder has to be a function.');
+ }
+
+ if (typeof options.filter === 'function') {
+ filter = options.filter;
+ obj = filter('', obj);
+ } else if (Array.isArray(options.filter)) {
+ objKeys = filter = options.filter;
+ }
+
+ var keys = [];
+
+ if (typeof obj !== 'object' || obj === null) {
+ return '';
+ }
+
+ var arrayFormat;
+ if (options.arrayFormat in arrayPrefixGenerators) {
+ arrayFormat = options.arrayFormat;
+ } else if ('indices' in options) {
+ arrayFormat = options.indices ? 'indices' : 'repeat';
+ } else {
+ arrayFormat = 'indices';
+ }
+
+ var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];
+
+ if (!objKeys) {
+ objKeys = Object.keys(obj);
+ }
+
+ if (sort) {
+ objKeys.sort(sort);
+ }
+
+ for (var i = 0; i < objKeys.length; ++i) {
+ var key = objKeys[i];
+
+ if (skipNulls && obj[key] === null) {
+ continue;
+ }
+
+ keys = keys.concat(stringify(obj[key], key, generateArrayPrefix, strictNullHandling, skipNulls, encoder, filter, sort, allowDots));
+ }
+
+ return keys.join(delimiter);
+};
diff --git a/node_modules/qs/lib/utils.js b/node_modules/qs/lib/utils.js
new file mode 100755
index 0000000..2c5c8ee
--- /dev/null
+++ b/node_modules/qs/lib/utils.js
@@ -0,0 +1,164 @@
+'use strict';
+
+var hexTable = (function () {
+ var array = new Array(256);
+ for (var i = 0; i < 256; ++i) {
+ array[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
+ }
+
+ return array;
+}());
+
+exports.arrayToObject = function (source, options) {
+ var obj = options.plainObjects ? Object.create(null) : {};
+ for (var i = 0; i < source.length; ++i) {
+ if (typeof source[i] !== 'undefined') {
+ obj[i] = source[i];
+ }
+ }
+
+ return obj;
+};
+
+exports.merge = function (target, source, options) {
+ if (!source) {
+ return target;
+ }
+
+ if (typeof source !== 'object') {
+ if (Array.isArray(target)) {
+ target.push(source);
+ } else if (typeof target === 'object') {
+ target[source] = true;
+ } else {
+ return [target, source];
+ }
+
+ return target;
+ }
+
+ if (typeof target !== 'object') {
+ return [target].concat(source);
+ }
+
+ var mergeTarget = target;
+ if (Array.isArray(target) && !Array.isArray(source)) {
+ mergeTarget = exports.arrayToObject(target, options);
+ }
+
+ return Object.keys(source).reduce(function (acc, key) {
+ var value = source[key];
+
+ if (Object.prototype.hasOwnProperty.call(acc, key)) {
+ acc[key] = exports.merge(acc[key], value, options);
+ } else {
+ acc[key] = value;
+ }
+ return acc;
+ }, mergeTarget);
+};
+
+exports.decode = function (str) {
+ try {
+ return decodeURIComponent(str.replace(/\+/g, ' '));
+ } catch (e) {
+ return str;
+ }
+};
+
+exports.encode = function (str) {
+ // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
+ // It has been adapted here for stricter adherence to RFC 3986
+ if (str.length === 0) {
+ return str;
+ }
+
+ var string = typeof str === 'string' ? str : String(str);
+
+ var out = '';
+ for (var i = 0; i < string.length; ++i) {
+ var c = string.charCodeAt(i);
+
+ if (
+ c === 0x2D || // -
+ c === 0x2E || // .
+ c === 0x5F || // _
+ c === 0x7E || // ~
+ (c >= 0x30 && c <= 0x39) || // 0-9
+ (c >= 0x41 && c <= 0x5A) || // a-z
+ (c >= 0x61 && c <= 0x7A) // A-Z
+ ) {
+ out += string.charAt(i);
+ continue;
+ }
+
+ if (c < 0x80) {
+ out = out + hexTable[c];
+ continue;
+ }
+
+ if (c < 0x800) {
+ out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
+ continue;
+ }
+
+ if (c < 0xD800 || c >= 0xE000) {
+ out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
+ continue;
+ }
+
+ i += 1;
+ c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
+ out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)];
+ }
+
+ return out;
+};
+
+exports.compact = function (obj, references) {
+ if (typeof obj !== 'object' || obj === null) {
+ return obj;
+ }
+
+ var refs = references || [];
+ var lookup = refs.indexOf(obj);
+ if (lookup !== -1) {
+ return refs[lookup];
+ }
+
+ refs.push(obj);
+
+ if (Array.isArray(obj)) {
+ var compacted = [];
+
+ for (var i = 0; i < obj.length; ++i) {
+ if (obj[i] && typeof obj[i] === 'object') {
+ compacted.push(exports.compact(obj[i], refs));
+ } else if (typeof obj[i] !== 'undefined') {
+ compacted.push(obj[i]);
+ }
+ }
+
+ return compacted;
+ }
+
+ var keys = Object.keys(obj);
+ for (var j = 0; j < keys.length; ++j) {
+ var key = keys[j];
+ obj[key] = exports.compact(obj[key], refs);
+ }
+
+ return obj;
+};
+
+exports.isRegExp = function (obj) {
+ return Object.prototype.toString.call(obj) === '[object RegExp]';
+};
+
+exports.isBuffer = function (obj) {
+ if (obj === null || typeof obj === 'undefined') {
+ return false;
+ }
+
+ return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
+};
diff --git a/node_modules/qs/package.json b/node_modules/qs/package.json
new file mode 100644
index 0000000..0941dcf
--- /dev/null
+++ b/node_modules/qs/package.json
@@ -0,0 +1,120 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "qs@6.2.1",
+ "scope": null,
+ "escapedName": "qs",
+ "name": "qs",
+ "rawSpec": "6.2.1",
+ "spec": "6.2.1",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser"
+ ]
+ ],
+ "_from": "qs@6.2.1",
+ "_id": "qs@6.2.1",
+ "_inCache": true,
+ "_location": "/qs",
+ "_nodeVersion": "6.3.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/qs-6.2.1.tgz_1469044929716_0.06957711698487401"
+ },
+ "_npmUser": {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ },
+ "_npmVersion": "3.10.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "qs@6.2.1",
+ "scope": null,
+ "escapedName": "qs",
+ "name": "qs",
+ "rawSpec": "6.2.1",
+ "spec": "6.2.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/body-parser"
+ ],
+ "_resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz",
+ "_shasum": "ce03c5ff0935bc1d9d69a9f14cbd18e568d67625",
+ "_shrinkwrap": null,
+ "_spec": "qs@6.2.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser",
+ "bugs": {
+ "url": "https://github.com/ljharb/qs/issues"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "email": "ljharb@gmail.com",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "dependencies": {},
+ "description": "A querystring parser that supports nesting and arrays, with a depth limit",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^6.0.0",
+ "browserify": "^13.0.1",
+ "covert": "^1.1.0",
+ "eslint": "^3.1.0",
+ "evalmd": "^0.0.17",
+ "iconv-lite": "^0.4.13",
+ "mkdirp": "^0.5.1",
+ "parallelshell": "^2.0.0",
+ "qs-iconv": "^1.0.3",
+ "tape": "^4.6.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "ce03c5ff0935bc1d9d69a9f14cbd18e568d67625",
+ "tarball": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "gitHead": "335f839142e6c2c69f5302c4940d92acb0e77561",
+ "homepage": "https://github.com/ljharb/qs",
+ "keywords": [
+ "querystring",
+ "qs"
+ ],
+ "license": "BSD-3-Clause",
+ "main": "lib/index.js",
+ "maintainers": [
+ {
+ "name": "hueniverse",
+ "email": "eran@hammer.io"
+ },
+ {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ },
+ {
+ "name": "nlf",
+ "email": "quitlahok@gmail.com"
+ }
+ ],
+ "name": "qs",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/qs.git"
+ },
+ "scripts": {
+ "coverage": "covert test",
+ "dist": "mkdirp dist && browserify --standalone Qs lib/index.js > dist/qs.js",
+ "lint": "eslint lib/*.js text/*.js",
+ "prepublish": "npm run dist",
+ "pretest": "npm run --silent readme && npm run --silent lint",
+ "readme": "evalmd README.md",
+ "test": "npm run --silent coverage",
+ "tests-only": "node test"
+ },
+ "version": "6.2.1"
+}
diff --git a/node_modules/qs/test/index.js b/node_modules/qs/test/index.js
new file mode 100644
index 0000000..b6a7d95
--- /dev/null
+++ b/node_modules/qs/test/index.js
@@ -0,0 +1,5 @@
+require('./parse');
+
+require('./stringify');
+
+require('./utils');
diff --git a/node_modules/qs/test/parse.js b/node_modules/qs/test/parse.js
new file mode 100755
index 0000000..ccf8c8c
--- /dev/null
+++ b/node_modules/qs/test/parse.js
@@ -0,0 +1,451 @@
+'use strict';
+
+var test = require('tape');
+var qs = require('../');
+var iconv = require('iconv-lite');
+
+test('parse()', function (t) {
+ t.test('parses a simple string', function (st) {
+ st.deepEqual(qs.parse('0=foo'), { '0': 'foo' });
+ st.deepEqual(qs.parse('foo=c++'), { foo: 'c ' });
+ st.deepEqual(qs.parse('a[>=]=23'), { a: { '>=': '23' } });
+ st.deepEqual(qs.parse('a[<=>]==23'), { a: { '<=>': '=23' } });
+ st.deepEqual(qs.parse('a[==]=23'), { a: { '==': '23' } });
+ st.deepEqual(qs.parse('foo', { strictNullHandling: true }), { foo: null });
+ st.deepEqual(qs.parse('foo'), { foo: '' });
+ st.deepEqual(qs.parse('foo='), { foo: '' });
+ st.deepEqual(qs.parse('foo=bar'), { foo: 'bar' });
+ st.deepEqual(qs.parse(' foo = bar = baz '), { ' foo ': ' bar = baz ' });
+ st.deepEqual(qs.parse('foo=bar=baz'), { foo: 'bar=baz' });
+ st.deepEqual(qs.parse('foo=bar&bar=baz'), { foo: 'bar', bar: 'baz' });
+ st.deepEqual(qs.parse('foo2=bar2&baz2='), { foo2: 'bar2', baz2: '' });
+ st.deepEqual(qs.parse('foo=bar&baz', { strictNullHandling: true }), { foo: 'bar', baz: null });
+ st.deepEqual(qs.parse('foo=bar&baz'), { foo: 'bar', baz: '' });
+ st.deepEqual(qs.parse('cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World'), {
+ cht: 'p3',
+ chd: 't:60,40',
+ chs: '250x100',
+ chl: 'Hello|World'
+ });
+ st.end();
+ });
+
+ t.test('allows enabling dot notation', function (st) {
+ st.deepEqual(qs.parse('a.b=c'), { 'a.b': 'c' });
+ st.deepEqual(qs.parse('a.b=c', { allowDots: true }), { a: { b: 'c' } });
+ st.end();
+ });
+
+ t.deepEqual(qs.parse('a[b]=c'), { a: { b: 'c' } }, 'parses a single nested string');
+ t.deepEqual(qs.parse('a[b][c]=d'), { a: { b: { c: 'd' } } }, 'parses a double nested string');
+ t.deepEqual(
+ qs.parse('a[b][c][d][e][f][g][h]=i'),
+ { a: { b: { c: { d: { e: { f: { '[g][h]': 'i' } } } } } } },
+ 'defaults to a depth of 5'
+ );
+
+ t.test('only parses one level when depth = 1', function (st) {
+ st.deepEqual(qs.parse('a[b][c]=d', { depth: 1 }), { a: { b: { '[c]': 'd' } } });
+ st.deepEqual(qs.parse('a[b][c][d]=e', { depth: 1 }), { a: { b: { '[c][d]': 'e' } } });
+ st.end();
+ });
+
+ t.deepEqual(qs.parse('a=b&a=c'), { a: ['b', 'c'] }, 'parses a simple array');
+
+ t.test('parses an explicit array', function (st) {
+ st.deepEqual(qs.parse('a[]=b'), { a: ['b'] });
+ st.deepEqual(qs.parse('a[]=b&a[]=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a[]=b&a[]=c&a[]=d'), { a: ['b', 'c', 'd'] });
+ st.end();
+ });
+
+ t.test('parses a mix of simple and explicit arrays', function (st) {
+ st.deepEqual(qs.parse('a=b&a[]=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a[]=b&a=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a[0]=b&a=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a=b&a[0]=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a[1]=b&a=c'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a=b&a[1]=c'), { a: ['b', 'c'] });
+ st.end();
+ });
+
+ t.test('parses a nested array', function (st) {
+ st.deepEqual(qs.parse('a[b][]=c&a[b][]=d'), { a: { b: ['c', 'd'] } });
+ st.deepEqual(qs.parse('a[>=]=25'), { a: { '>=': '25' } });
+ st.end();
+ });
+
+ t.test('allows to specify array indices', function (st) {
+ st.deepEqual(qs.parse('a[1]=c&a[0]=b&a[2]=d'), { a: ['b', 'c', 'd'] });
+ st.deepEqual(qs.parse('a[1]=c&a[0]=b'), { a: ['b', 'c'] });
+ st.deepEqual(qs.parse('a[1]=c'), { a: ['c'] });
+ st.end();
+ });
+
+ t.test('limits specific array indices to 20', function (st) {
+ st.deepEqual(qs.parse('a[20]=a'), { a: ['a'] });
+ st.deepEqual(qs.parse('a[21]=a'), { a: { '21': 'a' } });
+ st.end();
+ });
+
+ t.deepEqual(qs.parse('a[12b]=c'), { a: { '12b': 'c' } }, 'supports keys that begin with a number');
+
+ t.test('supports encoded = signs', function (st) {
+ st.deepEqual(qs.parse('he%3Dllo=th%3Dere'), { 'he=llo': 'th=ere' });
+ st.end();
+ });
+
+ t.test('is ok with url encoded strings', function (st) {
+ st.deepEqual(qs.parse('a[b%20c]=d'), { a: { 'b c': 'd' } });
+ st.deepEqual(qs.parse('a[b]=c%20d'), { a: { b: 'c d' } });
+ st.end();
+ });
+
+ t.test('allows brackets in the value', function (st) {
+ st.deepEqual(qs.parse('pets=["tobi"]'), { pets: '["tobi"]' });
+ st.deepEqual(qs.parse('operators=[">=", "<="]'), { operators: '[">=", "<="]' });
+ st.end();
+ });
+
+ t.test('allows empty values', function (st) {
+ st.deepEqual(qs.parse(''), {});
+ st.deepEqual(qs.parse(null), {});
+ st.deepEqual(qs.parse(undefined), {});
+ st.end();
+ });
+
+ t.test('transforms arrays to objects', function (st) {
+ st.deepEqual(qs.parse('foo[0]=bar&foo[bad]=baz'), { foo: { '0': 'bar', bad: 'baz' } });
+ st.deepEqual(qs.parse('foo[bad]=baz&foo[0]=bar'), { foo: { bad: 'baz', '0': 'bar' } });
+ st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar'), { foo: { bad: 'baz', '0': 'bar' } });
+ st.deepEqual(qs.parse('foo[]=bar&foo[bad]=baz'), { foo: { '0': 'bar', bad: 'baz' } });
+ st.deepEqual(qs.parse('foo[bad]=baz&foo[]=bar&foo[]=foo'), { foo: { bad: 'baz', '0': 'bar', '1': 'foo' } });
+ st.deepEqual(qs.parse('foo[0][a]=a&foo[0][b]=b&foo[1][a]=aa&foo[1][b]=bb'), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
+
+ st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: false }), { a: { '0': 'b', c: true, t: 'u' } });
+ st.deepEqual(qs.parse('a[]=b&a[t]=u&a[hasOwnProperty]=c', { allowPrototypes: true }), { a: { '0': 'b', t: 'u', hasOwnProperty: 'c' } });
+ st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: false }), { a: { '0': 'b', '1': 'c', x: 'y' } });
+ st.deepEqual(qs.parse('a[]=b&a[hasOwnProperty]=c&a[x]=y', { allowPrototypes: true }), { a: { '0': 'b', hasOwnProperty: 'c', x: 'y' } });
+ st.end();
+ });
+
+ t.test('transforms arrays to objects (dot notation)', function (st) {
+ st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: 'baz' } });
+ st.deepEqual(qs.parse('foo[0].baz=bar&fool.bad.boo=baz', { allowDots: true }), { foo: [{ baz: 'bar' }], fool: { bad: { boo: 'baz' } } });
+ st.deepEqual(qs.parse('foo[0][0].baz=bar&fool.bad=baz', { allowDots: true }), { foo: [[{ baz: 'bar' }]], fool: { bad: 'baz' } });
+ st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15'], bar: '2' }] });
+ st.deepEqual(qs.parse('foo[0].baz[0]=15&foo[0].baz[1]=16&foo[0].bar=2', { allowDots: true }), { foo: [{ baz: ['15', '16'], bar: '2' }] });
+ st.deepEqual(qs.parse('foo.bad=baz&foo[0]=bar', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar' } });
+ st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar' } });
+ st.deepEqual(qs.parse('foo[]=bar&foo.bad=baz', { allowDots: true }), { foo: { '0': 'bar', bad: 'baz' } });
+ st.deepEqual(qs.parse('foo.bad=baz&foo[]=bar&foo[]=foo', { allowDots: true }), { foo: { bad: 'baz', '0': 'bar', '1': 'foo' } });
+ st.deepEqual(qs.parse('foo[0].a=a&foo[0].b=b&foo[1].a=aa&foo[1].b=bb', { allowDots: true }), { foo: [{ a: 'a', b: 'b' }, { a: 'aa', b: 'bb' }] });
+ st.end();
+ });
+
+ t.deepEqual(qs.parse('a[b]=c&a=d'), { a: { b: 'c', d: true } }, 'can add keys to objects');
+
+ t.test('correctly prunes undefined values when converting an array to an object', function (st) {
+ st.deepEqual(qs.parse('a[2]=b&a[99999999]=c'), { a: { '2': 'b', '99999999': 'c' } });
+ st.end();
+ });
+
+ t.test('supports malformed uri characters', function (st) {
+ st.deepEqual(qs.parse('{%:%}', { strictNullHandling: true }), { '{%:%}': null });
+ st.deepEqual(qs.parse('{%:%}='), { '{%:%}': '' });
+ st.deepEqual(qs.parse('foo=%:%}'), { foo: '%:%}' });
+ st.end();
+ });
+
+ t.test('doesn\'t produce empty keys', function (st) {
+ st.deepEqual(qs.parse('_r=1&'), { '_r': '1' });
+ st.end();
+ });
+
+ t.test('cannot access Object prototype', function (st) {
+ qs.parse('constructor[prototype][bad]=bad');
+ qs.parse('bad[constructor][prototype][bad]=bad');
+ st.equal(typeof Object.prototype.bad, 'undefined');
+ st.end();
+ });
+
+ t.test('parses arrays of objects', function (st) {
+ st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
+ st.deepEqual(qs.parse('a[0][b]=c'), { a: [{ b: 'c' }] });
+ st.end();
+ });
+
+ t.test('allows for empty strings in arrays', function (st) {
+ st.deepEqual(qs.parse('a[]=b&a[]=&a[]=c'), { a: ['b', '', 'c'] });
+
+ st.deepEqual(
+ qs.parse('a[0]=b&a[1]&a[2]=c&a[19]=', { strictNullHandling: true, arrayLimit: 20 }),
+ { a: ['b', null, 'c', ''] },
+ 'with arrayLimit 20 + array indices: null then empty string works'
+ );
+ st.deepEqual(
+ qs.parse('a[]=b&a[]&a[]=c&a[]=', { strictNullHandling: true, arrayLimit: 0 }),
+ { a: ['b', null, 'c', ''] },
+ 'with arrayLimit 0 + array brackets: null then empty string works'
+ );
+
+ st.deepEqual(
+ qs.parse('a[0]=b&a[1]=&a[2]=c&a[19]', { strictNullHandling: true, arrayLimit: 20 }),
+ { a: ['b', '', 'c', null] },
+ 'with arrayLimit 20 + array indices: empty string then null works'
+ );
+ st.deepEqual(
+ qs.parse('a[]=b&a[]=&a[]=c&a[]', { strictNullHandling: true, arrayLimit: 0 }),
+ { a: ['b', '', 'c', null] },
+ 'with arrayLimit 0 + array brackets: empty string then null works'
+ );
+
+ st.deepEqual(
+ qs.parse('a[]=&a[]=b&a[]=c'),
+ { a: ['', 'b', 'c'] },
+ 'array brackets: empty strings work'
+ );
+ st.end();
+ });
+
+ t.test('compacts sparse arrays', function (st) {
+ st.deepEqual(qs.parse('a[10]=1&a[2]=2'), { a: ['2', '1'] });
+ st.deepEqual(qs.parse('a[1][b][2][c]=1'), { a: [{ b: [{ c: '1' }] }] });
+ st.deepEqual(qs.parse('a[1][2][3][c]=1'), { a: [[[{ c: '1' }]]] });
+ st.deepEqual(qs.parse('a[1][2][3][c][1]=1'), { a: [[[{ c: ['1'] }]]] });
+ st.end();
+ });
+
+ t.test('parses semi-parsed strings', function (st) {
+ st.deepEqual(qs.parse({ 'a[b]': 'c' }), { a: { b: 'c' } });
+ st.deepEqual(qs.parse({ 'a[b]': 'c', 'a[d]': 'e' }), { a: { b: 'c', d: 'e' } });
+ st.end();
+ });
+
+ t.test('parses buffers correctly', function (st) {
+ var b = new Buffer('test');
+ st.deepEqual(qs.parse({ a: b }), { a: b });
+ st.end();
+ });
+
+ t.test('continues parsing when no parent is found', function (st) {
+ st.deepEqual(qs.parse('[]=&a=b'), { '0': '', a: 'b' });
+ st.deepEqual(qs.parse('[]&a=b', { strictNullHandling: true }), { '0': null, a: 'b' });
+ st.deepEqual(qs.parse('[foo]=bar'), { foo: 'bar' });
+ st.end();
+ });
+
+ t.test('does not error when parsing a very long array', function (st) {
+ var str = 'a[]=a';
+ while (Buffer.byteLength(str) < 128 * 1024) {
+ str = str + '&' + str;
+ }
+
+ st.doesNotThrow(function () { qs.parse(str); });
+
+ st.end();
+ });
+
+ t.test('should not throw when a native prototype has an enumerable property', { parallel: false }, function (st) {
+ Object.prototype.crash = '';
+ Array.prototype.crash = '';
+ st.doesNotThrow(qs.parse.bind(null, 'a=b'));
+ st.deepEqual(qs.parse('a=b'), { a: 'b' });
+ st.doesNotThrow(qs.parse.bind(null, 'a[][b]=c'));
+ st.deepEqual(qs.parse('a[][b]=c'), { a: [{ b: 'c' }] });
+ delete Object.prototype.crash;
+ delete Array.prototype.crash;
+ st.end();
+ });
+
+ t.test('parses a string with an alternative string delimiter', function (st) {
+ st.deepEqual(qs.parse('a=b;c=d', { delimiter: ';' }), { a: 'b', c: 'd' });
+ st.end();
+ });
+
+ t.test('parses a string with an alternative RegExp delimiter', function (st) {
+ st.deepEqual(qs.parse('a=b; c=d', { delimiter: /[;,] */ }), { a: 'b', c: 'd' });
+ st.end();
+ });
+
+ t.test('does not use non-splittable objects as delimiters', function (st) {
+ st.deepEqual(qs.parse('a=b&c=d', { delimiter: true }), { a: 'b', c: 'd' });
+ st.end();
+ });
+
+ t.test('allows overriding parameter limit', function (st) {
+ st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: 1 }), { a: 'b' });
+ st.end();
+ });
+
+ t.test('allows setting the parameter limit to Infinity', function (st) {
+ st.deepEqual(qs.parse('a=b&c=d', { parameterLimit: Infinity }), { a: 'b', c: 'd' });
+ st.end();
+ });
+
+ t.test('allows overriding array limit', function (st) {
+ st.deepEqual(qs.parse('a[0]=b', { arrayLimit: -1 }), { a: { '0': 'b' } });
+ st.deepEqual(qs.parse('a[-1]=b', { arrayLimit: -1 }), { a: { '-1': 'b' } });
+ st.deepEqual(qs.parse('a[0]=b&a[1]=c', { arrayLimit: 0 }), { a: { '0': 'b', '1': 'c' } });
+ st.end();
+ });
+
+ t.test('allows disabling array parsing', function (st) {
+ st.deepEqual(qs.parse('a[0]=b&a[1]=c', { parseArrays: false }), { a: { '0': 'b', '1': 'c' } });
+ st.end();
+ });
+
+ t.test('parses an object', function (st) {
+ var input = {
+ 'user[name]': { 'pop[bob]': 3 },
+ 'user[email]': null
+ };
+
+ var expected = {
+ user: {
+ name: { 'pop[bob]': 3 },
+ email: null
+ }
+ };
+
+ var result = qs.parse(input);
+
+ st.deepEqual(result, expected);
+ st.end();
+ });
+
+ t.test('parses an object in dot notation', function (st) {
+ var input = {
+ 'user.name': { 'pop[bob]': 3 },
+ 'user.email.': null
+ };
+
+ var expected = {
+ user: {
+ name: { 'pop[bob]': 3 },
+ email: null
+ }
+ };
+
+ var result = qs.parse(input, { allowDots: true });
+
+ st.deepEqual(result, expected);
+ st.end();
+ });
+
+ t.test('parses an object and not child values', function (st) {
+ var input = {
+ 'user[name]': { 'pop[bob]': { 'test': 3 } },
+ 'user[email]': null
+ };
+
+ var expected = {
+ user: {
+ name: { 'pop[bob]': { 'test': 3 } },
+ email: null
+ }
+ };
+
+ var result = qs.parse(input);
+
+ st.deepEqual(result, expected);
+ st.end();
+ });
+
+ t.test('does not blow up when Buffer global is missing', function (st) {
+ var tempBuffer = global.Buffer;
+ delete global.Buffer;
+ var result = qs.parse('a=b&c=d');
+ global.Buffer = tempBuffer;
+ st.deepEqual(result, { a: 'b', c: 'd' });
+ st.end();
+ });
+
+ t.test('does not crash when parsing circular references', function (st) {
+ var a = {};
+ a.b = a;
+
+ var parsed;
+
+ st.doesNotThrow(function () {
+ parsed = qs.parse({ 'foo[bar]': 'baz', 'foo[baz]': a });
+ });
+
+ st.equal('foo' in parsed, true, 'parsed has "foo" property');
+ st.equal('bar' in parsed.foo, true);
+ st.equal('baz' in parsed.foo, true);
+ st.equal(parsed.foo.bar, 'baz');
+ st.deepEqual(parsed.foo.baz, a);
+ st.end();
+ });
+
+ t.test('parses plain objects correctly', function (st) {
+ var a = Object.create(null);
+ a.b = 'c';
+
+ st.deepEqual(qs.parse(a), { b: 'c' });
+ var result = qs.parse({ a: a });
+ st.equal('a' in result, true, 'result has "a" property');
+ st.deepEqual(result.a, a);
+ st.end();
+ });
+
+ t.test('parses dates correctly', function (st) {
+ var now = new Date();
+ st.deepEqual(qs.parse({ a: now }), { a: now });
+ st.end();
+ });
+
+ t.test('parses regular expressions correctly', function (st) {
+ var re = /^test$/;
+ st.deepEqual(qs.parse({ a: re }), { a: re });
+ st.end();
+ });
+
+ t.test('can allow overwriting prototype properties', function (st) {
+ st.deepEqual(qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }), { a: { hasOwnProperty: 'b' } }, { prototype: false });
+ st.deepEqual(qs.parse('hasOwnProperty=b', { allowPrototypes: true }), { hasOwnProperty: 'b' }, { prototype: false });
+ st.end();
+ });
+
+ t.test('can return plain objects', function (st) {
+ var expected = Object.create(null);
+ expected.a = Object.create(null);
+ expected.a.b = 'c';
+ expected.a.hasOwnProperty = 'd';
+ st.deepEqual(qs.parse('a[b]=c&a[hasOwnProperty]=d', { plainObjects: true }), expected);
+ st.deepEqual(qs.parse(null, { plainObjects: true }), Object.create(null));
+ var expectedArray = Object.create(null);
+ expectedArray.a = Object.create(null);
+ expectedArray.a['0'] = 'b';
+ expectedArray.a.c = 'd';
+ st.deepEqual(qs.parse('a[]=b&a[c]=d', { plainObjects: true }), expectedArray);
+ st.end();
+ });
+
+ t.test('can parse with custom encoding', function (st) {
+ st.deepEqual(qs.parse('%8c%a7=%91%e5%8d%e3%95%7b', {
+ decoder: function (str) {
+ var reg = /\%([0-9A-F]{2})/ig;
+ var result = [];
+ var parts;
+ var last = 0;
+ while (parts = reg.exec(str)) {
+ result.push(parseInt(parts[1], 16));
+ last = parts.index + parts[0].length;
+ }
+ return iconv.decode(new Buffer(result), 'shift_jis').toString();
+ }
+ }), { 県: '大阪府' });
+ st.end();
+ });
+
+ t.test('throws error with wrong decoder', function (st) {
+ st.throws(function () {
+ qs.parse({}, {
+ decoder: 'string'
+ });
+ }, new TypeError('Decoder has to be a function.'));
+ st.end();
+ });
+});
diff --git a/node_modules/qs/test/stringify.js b/node_modules/qs/test/stringify.js
new file mode 100755
index 0000000..699397e
--- /dev/null
+++ b/node_modules/qs/test/stringify.js
@@ -0,0 +1,305 @@
+'use strict';
+
+var test = require('tape');
+var qs = require('../');
+var iconv = require('iconv-lite');
+
+test('stringify()', function (t) {
+ t.test('stringifies a querystring object', function (st) {
+ st.equal(qs.stringify({ a: 'b' }), 'a=b');
+ st.equal(qs.stringify({ a: 1 }), 'a=1');
+ st.equal(qs.stringify({ a: 1, b: 2 }), 'a=1&b=2');
+ st.equal(qs.stringify({ a: 'A_Z' }), 'a=A_Z');
+ st.equal(qs.stringify({ a: '€' }), 'a=%E2%82%AC');
+ st.equal(qs.stringify({ a: '' }), 'a=%EE%80%80');
+ st.equal(qs.stringify({ a: 'א' }), 'a=%D7%90');
+ st.equal(qs.stringify({ a: '𐐷' }), 'a=%F0%90%90%B7');
+ st.end();
+ });
+
+ t.test('stringifies a nested object', function (st) {
+ st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
+ st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }), 'a%5Bb%5D%5Bc%5D%5Bd%5D=e');
+ st.end();
+ });
+
+ t.test('stringifies a nested object with dots notation', function (st) {
+ st.equal(qs.stringify({ a: { b: 'c' } }, { allowDots: true }), 'a.b=c');
+ st.equal(qs.stringify({ a: { b: { c: { d: 'e' } } } }, { allowDots: true }), 'a.b.c.d=e');
+ st.end();
+ });
+
+ t.test('stringifies an array value', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c', 'd'] }), 'a%5B0%5D=b&a%5B1%5D=c&a%5B2%5D=d');
+ st.end();
+ });
+
+ t.test('omits nulls when asked', function (st) {
+ st.equal(qs.stringify({ a: 'b', c: null }, { skipNulls: true }), 'a=b');
+ st.end();
+ });
+
+
+ t.test('omits nested nulls when asked', function (st) {
+ st.equal(qs.stringify({ a: { b: 'c', d: null } }, { skipNulls: true }), 'a%5Bb%5D=c');
+ st.end();
+ });
+
+ t.test('omits array indices when asked', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }), 'a=b&a=c&a=d');
+ st.end();
+ });
+
+ t.test('stringifies a nested array value', function (st) {
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }), 'a%5Bb%5D%5B0%5D=c&a%5Bb%5D%5B1%5D=d');
+ st.end();
+ });
+
+ t.test('stringifies a nested array value with dots notation', function (st) {
+ st.equal(qs.stringify({ a: { b: ['c', 'd'] } }, { allowDots: true, encode: false }), 'a.b[0]=c&a.b[1]=d');
+ st.end();
+ });
+
+ t.test('stringifies an object inside an array', function (st) {
+ st.equal(qs.stringify({ a: [{ b: 'c' }] }), 'a%5B0%5D%5Bb%5D=c');
+ st.equal(qs.stringify({ a: [{ b: { c: [1] } }] }), 'a%5B0%5D%5Bb%5D%5Bc%5D%5B0%5D=1');
+ st.end();
+ });
+
+ t.test('stringifies an array with mixed objects and primitives', function (st) {
+ st.equal(qs.stringify({ a: [{ b: 1 }, 2, 3] }, { encode: false }), 'a[0][b]=1&a[1]=2&a[2]=3');
+ st.end();
+ });
+
+ t.test('stringifies an object inside an array with dots notation', function (st) {
+ st.equal(qs.stringify({ a: [{ b: 'c' }] }, { allowDots: true, encode: false }), 'a[0].b=c');
+ st.equal(qs.stringify({ a: [{ b: { c: [1] } }] }, { allowDots: true, encode: false }), 'a[0].b.c[0]=1');
+ st.end();
+ });
+
+ t.test('does not omit object keys when indices = false', function (st) {
+ st.equal(qs.stringify({ a: [{ b: 'c' }] }, { indices: false }), 'a%5Bb%5D=c');
+ st.end();
+ });
+
+ t.test('uses indices notation for arrays when indices=true', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { indices: true }), 'a%5B0%5D=b&a%5B1%5D=c');
+ st.end();
+ });
+
+ t.test('uses indices notation for arrays when no arrayFormat is specified', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c'] }), 'a%5B0%5D=b&a%5B1%5D=c');
+ st.end();
+ });
+
+ t.test('uses indices notation for arrays when no arrayFormat=indices', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }), 'a%5B0%5D=b&a%5B1%5D=c');
+ st.end();
+ });
+
+ t.test('uses repeat notation for arrays when no arrayFormat=repeat', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }), 'a=b&a=c');
+ st.end();
+ });
+
+ t.test('uses brackets notation for arrays when no arrayFormat=brackets', function (st) {
+ st.equal(qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }), 'a%5B%5D=b&a%5B%5D=c');
+ st.end();
+ });
+
+ t.test('stringifies a complicated object', function (st) {
+ st.equal(qs.stringify({ a: { b: 'c', d: 'e' } }), 'a%5Bb%5D=c&a%5Bd%5D=e');
+ st.end();
+ });
+
+ t.test('stringifies an empty value', function (st) {
+ st.equal(qs.stringify({ a: '' }), 'a=');
+ st.equal(qs.stringify({ a: null }, { strictNullHandling: true }), 'a');
+
+ st.equal(qs.stringify({ a: '', b: '' }), 'a=&b=');
+ st.equal(qs.stringify({ a: null, b: '' }, { strictNullHandling: true }), 'a&b=');
+
+ st.equal(qs.stringify({ a: { b: '' } }), 'a%5Bb%5D=');
+ st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: true }), 'a%5Bb%5D');
+ st.equal(qs.stringify({ a: { b: null } }, { strictNullHandling: false }), 'a%5Bb%5D=');
+
+ st.end();
+ });
+
+ t.test('stringifies an empty object', function (st) {
+ var obj = Object.create(null);
+ obj.a = 'b';
+ st.equal(qs.stringify(obj), 'a=b');
+ st.end();
+ });
+
+ t.test('returns an empty string for invalid input', function (st) {
+ st.equal(qs.stringify(undefined), '');
+ st.equal(qs.stringify(false), '');
+ st.equal(qs.stringify(null), '');
+ st.equal(qs.stringify(''), '');
+ st.end();
+ });
+
+ t.test('stringifies an object with an empty object as a child', function (st) {
+ var obj = {
+ a: Object.create(null)
+ };
+
+ obj.a.b = 'c';
+ st.equal(qs.stringify(obj), 'a%5Bb%5D=c');
+ st.end();
+ });
+
+ t.test('drops keys with a value of undefined', function (st) {
+ st.equal(qs.stringify({ a: undefined }), '');
+
+ st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: true }), 'a%5Bc%5D');
+ st.equal(qs.stringify({ a: { b: undefined, c: null } }, { strictNullHandling: false }), 'a%5Bc%5D=');
+ st.equal(qs.stringify({ a: { b: undefined, c: '' } }), 'a%5Bc%5D=');
+ st.end();
+ });
+
+ t.test('url encodes values', function (st) {
+ st.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');
+ st.end();
+ });
+
+ t.test('stringifies a date', function (st) {
+ var now = new Date();
+ var str = 'a=' + encodeURIComponent(now.toISOString());
+ st.equal(qs.stringify({ a: now }), str);
+ st.end();
+ });
+
+ t.test('stringifies the weird object from qs', function (st) {
+ st.equal(qs.stringify({ 'my weird field': '~q1!2"\'w$5&7/z8)?' }), 'my%20weird%20field=~q1%212%22%27w%245%267%2Fz8%29%3F');
+ st.end();
+ });
+
+ t.test('skips properties that are part of the object prototype', function (st) {
+ Object.prototype.crash = 'test';
+ st.equal(qs.stringify({ a: 'b' }), 'a=b');
+ st.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c');
+ delete Object.prototype.crash;
+ st.end();
+ });
+
+ t.test('stringifies boolean values', function (st) {
+ st.equal(qs.stringify({ a: true }), 'a=true');
+ st.equal(qs.stringify({ a: { b: true } }), 'a%5Bb%5D=true');
+ st.equal(qs.stringify({ b: false }), 'b=false');
+ st.equal(qs.stringify({ b: { c: false } }), 'b%5Bc%5D=false');
+ st.end();
+ });
+
+ t.test('stringifies buffer values', function (st) {
+ st.equal(qs.stringify({ a: new Buffer('test') }), 'a=test');
+ st.equal(qs.stringify({ a: { b: new Buffer('test') } }), 'a%5Bb%5D=test');
+ st.end();
+ });
+
+ t.test('stringifies an object using an alternative delimiter', function (st) {
+ st.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d');
+ st.end();
+ });
+
+ t.test('doesn\'t blow up when Buffer global is missing', function (st) {
+ var tempBuffer = global.Buffer;
+ delete global.Buffer;
+ var result = qs.stringify({ a: 'b', c: 'd' });
+ global.Buffer = tempBuffer;
+ st.equal(result, 'a=b&c=d');
+ st.end();
+ });
+
+ t.test('selects properties when filter=array', function (st) {
+ st.equal(qs.stringify({ a: 'b' }, { filter: ['a'] }), 'a=b');
+ st.equal(qs.stringify({ a: 1 }, { filter: [] }), '');
+ st.equal(qs.stringify({ a: { b: [1, 2, 3, 4], c: 'd' }, c: 'f' }, { filter: ['a', 'b', 0, 2] }), 'a%5Bb%5D%5B0%5D=1&a%5Bb%5D%5B2%5D=3');
+ st.end();
+ });
+
+ t.test('supports custom representations when filter=function', function (st) {
+ var calls = 0;
+ var obj = { a: 'b', c: 'd', e: { f: new Date(1257894000000) } };
+ var filterFunc = function (prefix, value) {
+ calls++;
+ if (calls === 1) {
+ st.equal(prefix, '', 'prefix is empty');
+ st.equal(value, obj);
+ } else if (prefix === 'c') {
+ return;
+ } else if (value instanceof Date) {
+ st.equal(prefix, 'e[f]');
+ return value.getTime();
+ }
+ return value;
+ };
+
+ st.equal(qs.stringify(obj, { filter: filterFunc }), 'a=b&e%5Bf%5D=1257894000000');
+ st.equal(calls, 5);
+ st.end();
+ });
+
+ t.test('can disable uri encoding', function (st) {
+ st.equal(qs.stringify({ a: 'b' }, { encode: false }), 'a=b');
+ st.equal(qs.stringify({ a: { b: 'c' } }, { encode: false }), 'a[b]=c');
+ st.equal(qs.stringify({ a: 'b', c: null }, { strictNullHandling: true, encode: false }), 'a=b&c');
+ st.end();
+ });
+
+ t.test('can sort the keys', function (st) {
+ var sort = function (a, b) { return a.localeCompare(b); };
+ st.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: sort }), 'a=c&b=f&z=y');
+ st.equal(qs.stringify({ a: 'c', z: { j: 'a', i: 'b' }, b: 'f' }, { sort: sort }), 'a=c&b=f&z%5Bi%5D=b&z%5Bj%5D=a');
+ st.end();
+ });
+
+ t.test('can sort the keys at depth 3 or more too', function (st) {
+ var sort = function (a, b) { return a.localeCompare(b); };
+ st.equal(qs.stringify({ a: 'a', z: { zj: {zjb: 'zjb', zja: 'zja'}, zi: {zib: 'zib', zia: 'zia'} }, b: 'b' }, { sort: sort, encode: false }), 'a=a&b=b&z[zi][zia]=zia&z[zi][zib]=zib&z[zj][zja]=zja&z[zj][zjb]=zjb');
+ st.equal(qs.stringify({ a: 'a', z: { zj: {zjb: 'zjb', zja: 'zja'}, zi: {zib: 'zib', zia: 'zia'} }, b: 'b' }, { sort: null, encode: false }), 'a=a&z[zj][zjb]=zjb&z[zj][zja]=zja&z[zi][zib]=zib&z[zi][zia]=zia&b=b');
+ st.end();
+ });
+
+ t.test('can stringify with custom encoding', function (st) {
+ st.equal(qs.stringify({ 県: '大阪府', '': ''}, {
+ encoder: function (str) {
+ if (str.length === 0) {
+ return '';
+ }
+ var buf = iconv.encode(str, 'shiftjis');
+ var result = [];
+ for (var i=0; i < buf.length; ++i) {
+ result.push(buf.readUInt8(i).toString(16));
+ }
+ return '%' + result.join('%');
+ }
+ }), '%8c%a7=%91%e5%8d%e3%95%7b&=');
+ st.end();
+ });
+
+ t.test('throws error with wrong encoder', function (st) {
+ st.throws(function () {
+ qs.stringify({}, {
+ encoder: 'string'
+ });
+ }, new TypeError('Encoder has to be a function.'));
+ st.end();
+ });
+
+ t.test('can use custom encoder for a buffer object', {
+ skip: typeof Buffer === 'undefined'
+ }, function (st) {
+ st.equal(qs.stringify({ a: new Buffer([1]) }, {
+ encoder: function (buffer) {
+ if (typeof buffer === 'string') {
+ return buffer;
+ }
+ return String.fromCharCode(buffer.readUInt8(0) + 97);
+ }
+ }), 'a=b');
+ st.end();
+ });
+});
diff --git a/node_modules/qs/test/utils.js b/node_modules/qs/test/utils.js
new file mode 100755
index 0000000..4a8d824
--- /dev/null
+++ b/node_modules/qs/test/utils.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var test = require('tape');
+var utils = require('../lib/utils');
+
+test('merge()', function (t) {
+ t.deepEqual(utils.merge({ a: 'b' }, { a: 'c' }), { a: ['b', 'c'] }, 'merges two objects with the same key');
+ t.end();
+});
diff --git a/node_modules/randomatic/LICENSE b/node_modules/randomatic/LICENSE
new file mode 100755
index 0000000..4a3d2da
--- /dev/null
+++ b/node_modules/randomatic/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2016, Jon Schlinkert
+
+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/node_modules/randomatic/README.md b/node_modules/randomatic/README.md
new file mode 100644
index 0000000..1c5202a
--- /dev/null
+++ b/node_modules/randomatic/README.md
@@ -0,0 +1,152 @@
+# randomatic [](https://www.npmjs.com/package/randomatic) [](https://npmjs.org/package/randomatic) [](https://npmjs.org/package/randomatic) [](https://travis-ci.org/jonschlinkert/randomatic)
+
+> Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save randomatic
+```
+
+## Usage
+
+```js
+var randomize = require('randomatic');
+```
+
+## API
+
+```js
+randomize(pattern, length, options);
+```
+
+* `pattern` **{String}**: The pattern to use for randomizing
+* `length` **{Object}**: The length of the string to generate
+
+### pattern
+
+> The pattern to use for randomizing
+
+Patterns can contain any combination of the below characters, specified in any order.
+
+**Example:**
+
+To generate a 10-character randomized string using all available characters:
+
+```js
+randomize('*', 10);
+//=>
+
+randomize('Aa0!', 10);
+//=>
+```
+
+* `a`: Lowercase alpha characters (`abcdefghijklmnopqrstuvwxyz'`)
+* `A`: Uppercase alpha characters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ'`)
+* `0`: Numeric characters (`0123456789'`)
+* `!`: Special characters (`~!@#$%^&()_+-={}[];\',.`)
+* `*`: All characters (all of the above combined)
+* `?`: Custom characters (pass a string of custom characters to the options)
+
+### length
+
+> the length of the string to generate
+
+**Examples:**
+
+* `randomize('A', 5)` will generate a 5-character, uppercase, alphabetical, randomized string, e.g. `KDJWJ`.
+* `randomize('0', 2)` will generate a 2-digit random number
+* `randomize('0', 3)` will generate a 3-digit random number
+* `randomize('0', 12)` will generate a 12-digit random number
+* `randomize('A0', 16)` will generate a 16-character, alpha-numeric randomized string
+
+If `length` is left undefined, the length of the pattern in the first parameter will be used. For example:
+
+* `randomize('00')` will generate a 2-digit random number
+* `randomize('000')` will generate a 3-digit random number
+* `randomize('0000')` will generate a 4-digit random number...
+* `randomize('AAAAA')` will generate a 5-character, uppercase alphabetical random string...
+
+These are just examples, [see the tests](./test.js) for more use cases and examples.
+
+#### chars
+
+Type: `String`
+
+Default: `undefined`
+
+Define a custom string to be randomized.
+
+**Example:**
+
+* `randomize('?', 20, {chars: 'jonschlinkert'})` will generate a 20-character randomized string from the letters contained in `jonschlinkert`.
+* `randomize('?', {chars: 'jonschlinkert'})` will generate a 13-character randomized string from the letters contained in `jonschlinkert`.
+
+## Usage Examples
+
+* `randomize('A', 4)` (_whitespace insenstive_) would result in randomized 4-digit uppercase letters, like, `ZAKH`, `UJSL`... etc.
+* `randomize('AAAA')` is equivelant to `randomize('A', 4)`
+* `randomize('AAA0')` and `randomize('AA00')` and `randomize('A0A0')` are equivelant to `randomize('A0', 4)`
+* `randomize('aa')`: results in double-digit, randomized, lower-case letters (`abcdefghijklmnopqrstuvwxyz`)
+* `randomize('AAA')`: results in triple-digit, randomized, upper-case letters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ`)
+* `randomize('0', 6)`: results in six-digit, randomized nubmers (`0123456789`)
+* `randomize('!', 5)`: results in single-digit randomized, _valid_ non-letter characters (`~!@#$%^&()_+-={}[];\',.`)
+* `randomize('A!a0', 9)`: results in nine-digit, randomized characters (any of the above)
+
+_The order in which the characters are defined is insignificant._
+
+## About
+
+### Related projects
+
+* [pad-left](https://www.npmjs.com/package/pad-left): Left pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-left "Left pad a string with zeros or a specified string. Fastest implementation.")
+* [pad-right](https://www.npmjs.com/package/pad-right): Right pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-right "Right pad a string with zeros or a specified string. Fastest implementation.")
+* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 36 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [TrySound](https://github.com/TrySound) |
+| 1 | [paulmillr](https://github.com/paulmillr) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/randomatic/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on November 24, 2016._
\ No newline at end of file
diff --git a/node_modules/randomatic/index.js b/node_modules/randomatic/index.js
new file mode 100644
index 0000000..85dbe21
--- /dev/null
+++ b/node_modules/randomatic/index.js
@@ -0,0 +1,83 @@
+/*!
+ * randomatic
+ *
+ * This was originally inspired by
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License (MIT)
+ */
+
+'use strict';
+
+var isNumber = require('is-number');
+var typeOf = require('kind-of');
+
+/**
+ * Expose `randomatic`
+ */
+
+module.exports = randomatic;
+
+/**
+ * Available mask characters
+ */
+
+var type = {
+ lower: 'abcdefghijklmnopqrstuvwxyz',
+ upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ number: '0123456789',
+ special: '~!@#$%^&()_+-={}[];\',.'
+};
+
+type.all = type.lower + type.upper + type.number;
+
+/**
+ * Generate random character sequences of a specified `length`,
+ * based on the given `pattern`.
+ *
+ * @param {String} `pattern` The pattern to use for generating the random string.
+ * @param {String} `length` The length of the string to generate.
+ * @param {String} `options`
+ * @return {String}
+ * @api public
+ */
+
+function randomatic(pattern, length, options) {
+ if (typeof pattern === 'undefined') {
+ throw new Error('randomatic expects a string or number.');
+ }
+
+ var custom = false;
+ if (arguments.length === 1) {
+ if (typeof pattern === 'string') {
+ length = pattern.length;
+
+ } else if (isNumber(pattern)) {
+ options = {}; length = pattern; pattern = '*';
+ }
+ }
+
+ if (typeOf(length) === 'object' && length.hasOwnProperty('chars')) {
+ options = length;
+ pattern = options.chars;
+ length = pattern.length;
+ custom = true;
+ }
+
+ var opts = options || {};
+ var mask = '';
+ var res = '';
+
+ // Characters to be used
+ if (pattern.indexOf('?') !== -1) mask += opts.chars;
+ if (pattern.indexOf('a') !== -1) mask += type.lower;
+ if (pattern.indexOf('A') !== -1) mask += type.upper;
+ if (pattern.indexOf('0') !== -1) mask += type.number;
+ if (pattern.indexOf('!') !== -1) mask += type.special;
+ if (pattern.indexOf('*') !== -1) mask += type.all;
+ if (custom) mask += pattern;
+
+ while (length--) {
+ res += mask.charAt(parseInt(Math.random() * mask.length, 10));
+ }
+ return res;
+};
diff --git a/node_modules/randomatic/package.json b/node_modules/randomatic/package.json
new file mode 100644
index 0000000..5f4b3ad
--- /dev/null
+++ b/node_modules/randomatic/package.json
@@ -0,0 +1,141 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "randomatic@^1.1.3",
+ "scope": null,
+ "escapedName": "randomatic",
+ "name": "randomatic",
+ "rawSpec": "^1.1.3",
+ "spec": ">=1.1.3 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fill-range"
+ ]
+ ],
+ "_from": "randomatic@>=1.1.3 <2.0.0",
+ "_id": "randomatic@1.1.6",
+ "_inCache": true,
+ "_location": "/randomatic",
+ "_nodeVersion": "6.7.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/randomatic-1.1.6.tgz_1480022662943_0.08446102566085756"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.10.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "randomatic@^1.1.3",
+ "scope": null,
+ "escapedName": "randomatic",
+ "name": "randomatic",
+ "rawSpec": "^1.1.3",
+ "spec": ">=1.1.3 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/fill-range"
+ ],
+ "_resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
+ "_shasum": "110dcabff397e9dcff7c0789ccc0a49adf1ec5bb",
+ "_shrinkwrap": null,
+ "_spec": "randomatic@^1.1.3",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/fill-range",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/randomatic/issues"
+ },
+ "dependencies": {
+ "is-number": "^2.0.2",
+ "kind-of": "^3.0.2"
+ },
+ "description": "Generate randomized strings of a specified length, fast. Only the length is necessary, but you can optionally generate patterns using any combination of numeric, alpha-numeric, alphabetical, special or custom characters.",
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^0.1.4",
+ "glob": "^5.0.15",
+ "gulp-format-md": "^0.1.11",
+ "mocha": "*",
+ "should": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "110dcabff397e9dcff7c0789ccc0a49adf1ec5bb",
+ "tarball": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "80065df04deaa8f7a405d2689aaaef57117c6a94",
+ "homepage": "https://github.com/jonschlinkert/randomatic",
+ "keywords": [
+ "alpha",
+ "alpha-numeric",
+ "alphanumeric",
+ "characters",
+ "chars",
+ "numeric",
+ "rand",
+ "random",
+ "randomatic",
+ "randomize",
+ "randomized"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ },
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ }
+ ],
+ "name": "randomatic",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/randomatic.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "pad-left",
+ "pad-right",
+ "repeat-string"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ]
+ },
+ "version": "1.1.6"
+}
diff --git a/node_modules/range-parser/HISTORY.md b/node_modules/range-parser/HISTORY.md
new file mode 100644
index 0000000..5e01eef
--- /dev/null
+++ b/node_modules/range-parser/HISTORY.md
@@ -0,0 +1,51 @@
+1.2.0 / 2016-06-01
+==================
+
+ * Add `combine` option to combine overlapping ranges
+
+1.1.0 / 2016-05-13
+==================
+
+ * Fix incorrectly returning -1 when there is at least one valid range
+ * perf: remove internal function
+
+1.0.3 / 2015-10-29
+==================
+
+ * perf: enable strict mode
+
+1.0.2 / 2014-09-08
+==================
+
+ * Support Node.js 0.6
+
+1.0.1 / 2014-09-07
+==================
+
+ * Move repository to jshttp
+
+1.0.0 / 2013-12-11
+==================
+
+ * Add repository to package.json
+ * Add MIT license
+
+0.0.4 / 2012-06-17
+==================
+
+ * Change ret -1 for unsatisfiable and -2 when invalid
+
+0.0.3 / 2012-06-17
+==================
+
+ * Fix last-byte-pos default to len - 1
+
+0.0.2 / 2012-06-14
+==================
+
+ * Add `.type`
+
+0.0.1 / 2012-06-11
+==================
+
+ * Initial release
diff --git a/node_modules/range-parser/LICENSE b/node_modules/range-parser/LICENSE
new file mode 100644
index 0000000..3599954
--- /dev/null
+++ b/node_modules/range-parser/LICENSE
@@ -0,0 +1,23 @@
+(The MIT License)
+
+Copyright (c) 2012-2014 TJ Holowaychuk
+Copyright (c) 2015-2016 Douglas Christopher Wilson [
+// { start: 0, end: 10 },
+// { start: 50, end: 60 }
+// ]
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/range-parser.svg
+[npm-url]: https://npmjs.org/package/range-parser
+[node-version-image]: https://img.shields.io/node/v/range-parser.svg
+[node-version-url]: https://nodejs.org/endownload
+[travis-image]: https://img.shields.io/travis/jshttp/range-parser.svg
+[travis-url]: https://travis-ci.org/jshttp/range-parser
+[coveralls-image]: https://img.shields.io/coveralls/jshttp/range-parser.svg
+[coveralls-url]: https://coveralls.io/r/jshttp/range-parser
+[downloads-image]: https://img.shields.io/npm/dm/range-parser.svg
+[downloads-url]: https://npmjs.org/package/range-parser
diff --git a/node_modules/range-parser/index.js b/node_modules/range-parser/index.js
new file mode 100644
index 0000000..83b2eb6
--- /dev/null
+++ b/node_modules/range-parser/index.js
@@ -0,0 +1,158 @@
+/*!
+ * range-parser
+ * Copyright(c) 2012-2014 TJ Holowaychuk
+ * Copyright(c) 2015-2016 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = rangeParser
+
+/**
+ * Parse "Range" header `str` relative to the given file `size`.
+ *
+ * @param {Number} size
+ * @param {String} str
+ * @param {Object} [options]
+ * @return {Array}
+ * @public
+ */
+
+function rangeParser (size, str, options) {
+ var index = str.indexOf('=')
+
+ if (index === -1) {
+ return -2
+ }
+
+ // split the range string
+ var arr = str.slice(index + 1).split(',')
+ var ranges = []
+
+ // add ranges type
+ ranges.type = str.slice(0, index)
+
+ // parse all ranges
+ for (var i = 0; i < arr.length; i++) {
+ var range = arr[i].split('-')
+ var start = parseInt(range[0], 10)
+ var end = parseInt(range[1], 10)
+
+ // -nnn
+ if (isNaN(start)) {
+ start = size - end
+ end = size - 1
+ // nnn-
+ } else if (isNaN(end)) {
+ end = size - 1
+ }
+
+ // limit last-byte-pos to current length
+ if (end > size - 1) {
+ end = size - 1
+ }
+
+ // invalid or unsatisifiable
+ if (isNaN(start) || isNaN(end) || start > end || start < 0) {
+ continue
+ }
+
+ // add range
+ ranges.push({
+ start: start,
+ end: end
+ })
+ }
+
+ if (ranges.length < 1) {
+ // unsatisifiable
+ return -1
+ }
+
+ return options && options.combine
+ ? combineRanges(ranges)
+ : ranges
+}
+
+/**
+ * Combine overlapping & adjacent ranges.
+ * @private
+ */
+
+function combineRanges (ranges) {
+ var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)
+
+ for (var j = 0, i = 1; i < ordered.length; i++) {
+ var range = ordered[i]
+ var current = ordered[j]
+
+ if (range.start > current.end + 1) {
+ // next range
+ ordered[++j] = range
+ } else if (range.end > current.end) {
+ // extend range
+ current.end = range.end
+ current.index = Math.min(current.index, range.index)
+ }
+ }
+
+ // trim ordered array
+ ordered.length = j + 1
+
+ // generate combined range
+ var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)
+
+ // copy ranges type
+ combined.type = ranges.type
+
+ return combined
+}
+
+/**
+ * Map function to add index value to ranges.
+ * @private
+ */
+
+function mapWithIndex (range, index) {
+ return {
+ start: range.start,
+ end: range.end,
+ index: index
+ }
+}
+
+/**
+ * Map function to remove index value from ranges.
+ * @private
+ */
+
+function mapWithoutIndex (range) {
+ return {
+ start: range.start,
+ end: range.end
+ }
+}
+
+/**
+ * Sort function to sort ranges by index.
+ * @private
+ */
+
+function sortByRangeIndex (a, b) {
+ return a.index - b.index
+}
+
+/**
+ * Sort function to sort ranges by start position.
+ * @private
+ */
+
+function sortByRangeStart (a, b) {
+ return a.start - b.start
+}
diff --git a/node_modules/range-parser/package.json b/node_modules/range-parser/package.json
new file mode 100644
index 0000000..4ad928c
--- /dev/null
+++ b/node_modules/range-parser/package.json
@@ -0,0 +1,134 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "range-parser@~1.2.0",
+ "scope": null,
+ "escapedName": "range-parser",
+ "name": "range-parser",
+ "rawSpec": "~1.2.0",
+ "spec": ">=1.2.0 <1.3.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express"
+ ]
+ ],
+ "_from": "range-parser@>=1.2.0 <1.3.0",
+ "_id": "range-parser@1.2.0",
+ "_inCache": true,
+ "_location": "/range-parser",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/range-parser-1.2.0.tgz_1464803293097_0.6830497414339334"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "1.4.28",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "range-parser@~1.2.0",
+ "scope": null,
+ "escapedName": "range-parser",
+ "name": "range-parser",
+ "rawSpec": "~1.2.0",
+ "spec": ">=1.2.0 <1.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/express",
+ "/send"
+ ],
+ "_resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
+ "_shasum": "f49be6b487894ddc40dcc94a322f611092e00d5e",
+ "_shrinkwrap": null,
+ "_spec": "range-parser@~1.2.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/express",
+ "author": {
+ "name": "TJ Holowaychuk",
+ "email": "tj@vision-media.ca",
+ "url": "http://tjholowaychuk.com"
+ },
+ "bugs": {
+ "url": "https://github.com/jshttp/range-parser/issues"
+ },
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "James Wyatt Cready",
+ "email": "wyatt.cready@lanetix.com"
+ },
+ {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ }
+ ],
+ "dependencies": {},
+ "description": "Range header field string parser",
+ "devDependencies": {
+ "eslint": "2.11.1",
+ "eslint-config-standard": "5.3.1",
+ "eslint-plugin-promise": "1.1.0",
+ "eslint-plugin-standard": "1.3.2",
+ "istanbul": "0.4.3",
+ "mocha": "1.21.5"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "f49be6b487894ddc40dcc94a322f611092e00d5e",
+ "tarball": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "index.js"
+ ],
+ "gitHead": "0665aca31639d799dee1d35fb10970799559ec48",
+ "homepage": "https://github.com/jshttp/range-parser",
+ "keywords": [
+ "range",
+ "parser",
+ "http"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "jonathanong",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "jongleberry",
+ "email": "jonathanrichardong@gmail.com"
+ },
+ {
+ "name": "tjholowaychuk",
+ "email": "tj@vision-media.ca"
+ }
+ ],
+ "name": "range-parser",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jshttp/range-parser.git"
+ },
+ "scripts": {
+ "lint": "eslint **/*.js",
+ "test": "mocha --reporter spec",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot"
+ },
+ "version": "1.2.0"
+}
diff --git a/node_modules/raw-body/HISTORY.md b/node_modules/raw-body/HISTORY.md
new file mode 100644
index 0000000..23e9481
--- /dev/null
+++ b/node_modules/raw-body/HISTORY.md
@@ -0,0 +1,220 @@
+2.2.0 / 2017-01-02
+==================
+
+ * deps: iconv-lite@0.4.15
+ - Added encoding MS-31J
+ - Added encoding MS-932
+ - Added encoding MS-936
+ - Added encoding MS-949
+ - Added encoding MS-950
+ - Fix GBK/GB18030 handling of Euro character
+
+2.1.7 / 2016-06-19
+==================
+
+ * deps: bytes@2.4.0
+ * perf: remove double-cleanup on happy path
+
+2.1.6 / 2016-03-07
+==================
+
+ * deps: bytes@2.3.0
+ - Drop partial bytes on all parsed units
+ - Fix parsing byte string that looks like hex
+
+2.1.5 / 2015-11-30
+==================
+
+ * deps: bytes@2.2.0
+ * deps: iconv-lite@0.4.13
+
+2.1.4 / 2015-09-27
+==================
+
+ * Fix masking critical errors from `iconv-lite`
+ * deps: iconv-lite@0.4.12
+ - Fix CESU-8 decoding in Node.js 4.x
+
+2.1.3 / 2015-09-12
+==================
+
+ * Fix sync callback when attaching data listener causes sync read
+ - Node.js 0.10 compatibility issue
+
+2.1.2 / 2015-07-05
+==================
+
+ * Fix error stack traces to skip `makeError`
+ * deps: iconv-lite@0.4.11
+ - Add encoding CESU-8
+
+2.1.1 / 2015-06-14
+==================
+
+ * Use `unpipe` module for unpiping requests
+
+2.1.0 / 2015-05-28
+==================
+
+ * deps: iconv-lite@0.4.10
+ - Improved UTF-16 endianness detection
+ - Leading BOM is now removed when decoding
+ - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
+
+2.0.2 / 2015-05-21
+==================
+
+ * deps: bytes@2.1.0
+ - Slight optimizations
+
+2.0.1 / 2015-05-10
+==================
+
+ * Fix a false-positive when unpiping in Node.js 0.8
+
+2.0.0 / 2015-05-08
+==================
+
+ * Return a promise without callback instead of thunk
+ * deps: bytes@2.0.1
+ - units no longer case sensitive when parsing
+
+1.3.4 / 2015-04-15
+==================
+
+ * Fix hanging callback if request aborts during read
+ * deps: iconv-lite@0.4.8
+ - Add encoding alias UNICODE-1-1-UTF-7
+
+1.3.3 / 2015-02-08
+==================
+
+ * deps: iconv-lite@0.4.7
+ - Gracefully support enumerables on `Object.prototype`
+
+1.3.2 / 2015-01-20
+==================
+
+ * deps: iconv-lite@0.4.6
+ - Fix rare aliases of single-byte encodings
+
+1.3.1 / 2014-11-21
+==================
+
+ * deps: iconv-lite@0.4.5
+ - Fix Windows-31J and X-SJIS encoding support
+
+1.3.0 / 2014-07-20
+==================
+
+ * Fully unpipe the stream on error
+ - Fixes `Cannot switch to old mode now` error on Node.js 0.10+
+
+1.2.3 / 2014-07-20
+==================
+
+ * deps: iconv-lite@0.4.4
+ - Added encoding UTF-7
+
+1.2.2 / 2014-06-19
+==================
+
+ * Send invalid encoding error to callback
+
+1.2.1 / 2014-06-15
+==================
+
+ * deps: iconv-lite@0.4.3
+ - Added encodings UTF-16BE and UTF-16 with BOM
+
+1.2.0 / 2014-06-13
+==================
+
+ * Passing string as `options` interpreted as encoding
+ * Support all encodings from `iconv-lite`
+
+1.1.7 / 2014-06-12
+==================
+
+ * use `string_decoder` module from npm
+
+1.1.6 / 2014-05-27
+==================
+
+ * check encoding for old streams1
+ * support node.js < 0.10.6
+
+1.1.5 / 2014-05-14
+==================
+
+ * bump bytes
+
+1.1.4 / 2014-04-19
+==================
+
+ * allow true as an option
+ * bump bytes
+
+1.1.3 / 2014-03-02
+==================
+
+ * fix case when length=null
+
+1.1.2 / 2013-12-01
+==================
+
+ * be less strict on state.encoding check
+
+1.1.1 / 2013-11-27
+==================
+
+ * add engines
+
+1.1.0 / 2013-11-27
+==================
+
+ * add err.statusCode and err.type
+ * allow for encoding option to be true
+ * pause the stream instead of dumping on error
+ * throw if the stream's encoding is set
+
+1.0.1 / 2013-11-19
+==================
+
+ * dont support streams1, throw if dev set encoding
+
+1.0.0 / 2013-11-17
+==================
+
+ * rename `expected` option to `length`
+
+0.2.0 / 2013-11-15
+==================
+
+ * republish
+
+0.1.1 / 2013-11-15
+==================
+
+ * use bytes
+
+0.1.0 / 2013-11-11
+==================
+
+ * generator support
+
+0.0.3 / 2013-10-10
+==================
+
+ * update repo
+
+0.0.2 / 2013-09-14
+==================
+
+ * dump stream on bad headers
+ * listen to events after defining received and buffers
+
+0.0.1 / 2013-09-14
+==================
+
+ * Initial release
diff --git a/node_modules/raw-body/LICENSE b/node_modules/raw-body/LICENSE
new file mode 100644
index 0000000..d695c8f
--- /dev/null
+++ b/node_modules/raw-body/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2014 Jonathan Ong
+Copyright (c) 2014-2015 Douglas Christopher Wilson
+
+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/node_modules/raw-body/README.md b/node_modules/raw-body/README.md
new file mode 100644
index 0000000..7ed7441
--- /dev/null
+++ b/node_modules/raw-body/README.md
@@ -0,0 +1,145 @@
+# raw-body
+
+[![NPM Version][npm-image]][npm-url]
+[![NPM Downloads][downloads-image]][downloads-url]
+[![Node.js Version][node-version-image]][node-version-url]
+[![Build status][travis-image]][travis-url]
+[![Test coverage][coveralls-image]][coveralls-url]
+
+Gets the entire buffer of a stream either as a `Buffer` or a string.
+Validates the stream's length against an expected length and maximum limit.
+Ideal for parsing request bodies.
+
+## API
+
+
+
+```js
+var getRawBody = require('raw-body')
+```
+
+### getRawBody(stream, [options], [callback])
+
+**Returns a promise if no callback specified and global `Promise` exists.**
+
+Options:
+
+- `length` - The length of the stream.
+ If the contents of the stream do not add up to this length,
+ an `400` error code is returned.
+- `limit` - The byte limit of the body.
+ This is the number of bytes or any string format supported by
+ [bytes](https://www.npmjs.com/package/bytes),
+ for example `1000`, `'500kb'` or `'3mb'`.
+ If the body ends up being larger than this limit,
+ a `413` error code is returned.
+- `encoding` - The encoding to use to decode the body into a string.
+ By default, a `Buffer` instance will be returned when no encoding is specified.
+ Most likely, you want `utf-8`, so setting `encoding` to `true` will decode as `utf-8`.
+ You can use any type of encoding supported by [iconv-lite](https://www.npmjs.org/package/iconv-lite#readme).
+
+You can also pass a string in place of options to just specify the encoding.
+
+`callback(err, res)`:
+
+- `err` - the following attributes will be defined if applicable:
+
+ - `limit` - the limit in bytes
+ - `length` and `expected` - the expected length of the stream
+ - `received` - the received bytes
+ - `encoding` - the invalid encoding
+ - `status` and `statusCode` - the corresponding status code for the error
+ - `type` - either `entity.too.large`, `request.aborted`, `request.size.invalid`, `stream.encoding.set`, or `encoding.unsupported`
+
+- `res` - the result, either as a `String` if an encoding was set or a `Buffer` otherwise.
+
+If an error occurs, the stream will be paused, everything unpiped,
+and you are responsible for correctly disposing the stream.
+For HTTP requests, no handling is required if you send a response.
+For streams that use file descriptors, you should `stream.destroy()` or `stream.close()` to prevent leaks.
+
+## Examples
+
+### Simple Express example
+
+```js
+var contentType = require('content-type')
+var express = require('express')
+var getRawBody = require('raw-body')
+
+var app = express()
+
+app.use(function (req, res, next) {
+ getRawBody(req, {
+ length: req.headers['content-length'],
+ limit: '1mb',
+ encoding: contentType.parse(req).parameters.charset
+ }, function (err, string) {
+ if (err) return next(err)
+ req.text = string
+ next()
+ })
+})
+
+// now access req.text
+```
+
+### Simple Koa example
+
+```js
+var contentType = require('content-type')
+var getRawBody = require('raw-body')
+var koa = require('koa')
+
+var app = koa()
+
+app.use(function * (next) {
+ this.text = yield getRawBody(this.req, {
+ length: this.req.headers['content-length'],
+ limit: '1mb',
+ encoding: contentType.parse(this.req).parameters.charset
+ })
+ yield next
+})
+
+// now access this.text
+```
+
+### Using as a promise
+
+To use this library as a promise, simply omit the `callback` and a promise is
+returned, provided that a global `Promise` is defined.
+
+```js
+var getRawBody = require('raw-body')
+var http = require('http')
+
+var server = http.createServer(function (req, res) {
+ getRawBody(req)
+ .then(function (buf) {
+ res.statusCode = 200
+ res.end(buf.length + ' bytes submitted')
+ })
+ .catch(function (err) {
+ res.statusCode = 500
+ res.end(err.message)
+ })
+})
+
+server.listen(3000)
+```
+
+## License
+
+[MIT](LICENSE)
+
+[npm-image]: https://img.shields.io/npm/v/raw-body.svg
+[npm-url]: https://npmjs.org/package/raw-body
+[node-version-image]: https://img.shields.io/node/v/raw-body.svg
+[node-version-url]: https://nodejs.org/en/download/
+[travis-image]: https://img.shields.io/travis/stream-utils/raw-body/master.svg
+[travis-url]: https://travis-ci.org/stream-utils/raw-body
+[coveralls-image]: https://img.shields.io/coveralls/stream-utils/raw-body/master.svg
+[coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master
+[downloads-image]: https://img.shields.io/npm/dm/raw-body.svg
+[downloads-url]: https://npmjs.org/package/raw-body
diff --git a/node_modules/raw-body/index.js b/node_modules/raw-body/index.js
new file mode 100644
index 0000000..57b9c11
--- /dev/null
+++ b/node_modules/raw-body/index.js
@@ -0,0 +1,320 @@
+/*!
+ * raw-body
+ * Copyright(c) 2013-2014 Jonathan Ong
+ * Copyright(c) 2014-2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var bytes = require('bytes')
+var iconv = require('iconv-lite')
+var unpipe = require('unpipe')
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = getRawBody
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var iconvEncodingMessageRegExp = /^Encoding not recognized: /
+
+/**
+ * Get the decoder for a given encoding.
+ *
+ * @param {string} encoding
+ * @private
+ */
+
+function getDecoder (encoding) {
+ if (!encoding) return null
+
+ try {
+ return iconv.getDecoder(encoding)
+ } catch (e) {
+ // error getting decoder
+ if (!iconvEncodingMessageRegExp.test(e.message)) throw e
+
+ // the encoding was not found
+ throw createError(415, 'specified encoding unsupported', 'encoding.unsupported', {
+ encoding: encoding
+ })
+ }
+}
+
+/**
+ * Get the raw body of a stream (typically HTTP).
+ *
+ * @param {object} stream
+ * @param {object|string|function} [options]
+ * @param {function} [callback]
+ * @public
+ */
+
+function getRawBody (stream, options, callback) {
+ var done = callback
+ var opts = options || {}
+
+ if (options === true || typeof options === 'string') {
+ // short cut for encoding
+ opts = {
+ encoding: options
+ }
+ }
+
+ if (typeof options === 'function') {
+ done = options
+ opts = {}
+ }
+
+ // validate callback is a function, if provided
+ if (done !== undefined && typeof done !== 'function') {
+ throw new TypeError('argument callback must be a function')
+ }
+
+ // require the callback without promises
+ if (!done && !global.Promise) {
+ throw new TypeError('argument callback is required')
+ }
+
+ // get encoding
+ var encoding = opts.encoding !== true
+ ? opts.encoding
+ : 'utf-8'
+
+ // convert the limit to an integer
+ var limit = bytes.parse(opts.limit)
+
+ // convert the expected length to an integer
+ var length = opts.length != null && !isNaN(opts.length)
+ ? parseInt(opts.length, 10)
+ : null
+
+ if (done) {
+ // classic callback style
+ return readStream(stream, encoding, length, limit, done)
+ }
+
+ return new Promise(function executor (resolve, reject) {
+ readStream(stream, encoding, length, limit, function onRead (err, buf) {
+ if (err) return reject(err)
+ resolve(buf)
+ })
+ })
+}
+
+/**
+ * Halt a stream.
+ *
+ * @param {Object} stream
+ * @private
+ */
+
+function halt (stream) {
+ // unpipe everything from the stream
+ unpipe(stream)
+
+ // pause stream
+ if (typeof stream.pause === 'function') {
+ stream.pause()
+ }
+}
+
+/**
+ * Make a serializable error object.
+ *
+ * To create serializable errors you must re-set message so
+ * that it is enumerable and you must re configure the type
+ * property so that is writable and enumerable.
+ *
+ * @param {number} status
+ * @param {string} message
+ * @param {string} type
+ * @param {object} props
+ * @private
+ */
+
+function createError (status, message, type, props) {
+ var error = new Error()
+
+ // capture stack trace
+ Error.captureStackTrace(error, createError)
+
+ // set free-form properties
+ for (var prop in props) {
+ error[prop] = props[prop]
+ }
+
+ // set message
+ error.message = message
+
+ // set status
+ error.status = status
+ error.statusCode = status
+
+ // set type
+ Object.defineProperty(error, 'type', {
+ value: type,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ })
+
+ return error
+}
+
+/**
+ * Read the data from the stream.
+ *
+ * @param {object} stream
+ * @param {string} encoding
+ * @param {number} length
+ * @param {number} limit
+ * @param {function} callback
+ * @public
+ */
+
+function readStream (stream, encoding, length, limit, callback) {
+ var complete = false
+ var sync = true
+
+ // check the length and limit options.
+ // note: we intentionally leave the stream paused,
+ // so users should handle the stream themselves.
+ if (limit !== null && length !== null && length > limit) {
+ return done(createError(413, 'request entity too large', 'entity.too.large', {
+ expected: length,
+ length: length,
+ limit: limit
+ }))
+ }
+
+ // streams1: assert request encoding is buffer.
+ // streams2+: assert the stream encoding is buffer.
+ // stream._decoder: streams1
+ // state.encoding: streams2
+ // state.decoder: streams2, specifically < 0.10.6
+ var state = stream._readableState
+ if (stream._decoder || (state && (state.encoding || state.decoder))) {
+ // developer error
+ return done(createError(500, 'stream encoding should not be set', 'stream.encoding.set'))
+ }
+
+ var received = 0
+ var decoder
+
+ try {
+ decoder = getDecoder(encoding)
+ } catch (err) {
+ return done(err)
+ }
+
+ var buffer = decoder
+ ? ''
+ : []
+
+ // attach listeners
+ stream.on('aborted', onAborted)
+ stream.on('close', cleanup)
+ stream.on('data', onData)
+ stream.on('end', onEnd)
+ stream.on('error', onEnd)
+
+ // mark sync section complete
+ sync = false
+
+ function done () {
+ var args = new Array(arguments.length)
+
+ // copy arguments
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i]
+ }
+
+ // mark complete
+ complete = true
+
+ if (sync) {
+ process.nextTick(invokeCallback)
+ } else {
+ invokeCallback()
+ }
+
+ function invokeCallback () {
+ cleanup()
+
+ if (args[0]) {
+ // halt the stream on error
+ halt(stream)
+ }
+
+ callback.apply(null, args)
+ }
+ }
+
+ function onAborted () {
+ if (complete) return
+
+ done(createError(400, 'request aborted', 'request.aborted', {
+ code: 'ECONNABORTED',
+ expected: length,
+ length: length,
+ received: received
+ }))
+ }
+
+ function onData (chunk) {
+ if (complete) return
+
+ received += chunk.length
+ decoder
+ ? buffer += decoder.write(chunk)
+ : buffer.push(chunk)
+
+ if (limit !== null && received > limit) {
+ done(createError(413, 'request entity too large', 'entity.too.large', {
+ limit: limit,
+ received: received
+ }))
+ }
+ }
+
+ function onEnd (err) {
+ if (complete) return
+ if (err) return done(err)
+
+ if (length !== null && received !== length) {
+ done(createError(400, 'request size did not match content length', 'request.size.invalid', {
+ expected: length,
+ length: length,
+ received: received
+ }))
+ } else {
+ var string = decoder
+ ? buffer + (decoder.end() || '')
+ : Buffer.concat(buffer)
+ done(null, string)
+ }
+ }
+
+ function cleanup () {
+ buffer = null
+
+ stream.removeListener('aborted', onAborted)
+ stream.removeListener('data', onData)
+ stream.removeListener('end', onEnd)
+ stream.removeListener('error', onEnd)
+ stream.removeListener('close', cleanup)
+ }
+}
diff --git a/node_modules/raw-body/package.json b/node_modules/raw-body/package.json
new file mode 100644
index 0000000..4001133
--- /dev/null
+++ b/node_modules/raw-body/package.json
@@ -0,0 +1,125 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "raw-body@~2.2.0",
+ "scope": null,
+ "escapedName": "raw-body",
+ "name": "raw-body",
+ "rawSpec": "~2.2.0",
+ "spec": ">=2.2.0 <2.3.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser"
+ ]
+ ],
+ "_from": "raw-body@>=2.2.0 <2.3.0",
+ "_id": "raw-body@2.2.0",
+ "_inCache": true,
+ "_location": "/raw-body",
+ "_nodeVersion": "4.6.1",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/raw-body-2.2.0.tgz_1483409502596_0.06903165532276034"
+ },
+ "_npmUser": {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ "_npmVersion": "2.15.9",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "raw-body@~2.2.0",
+ "scope": null,
+ "escapedName": "raw-body",
+ "name": "raw-body",
+ "rawSpec": "~2.2.0",
+ "spec": ">=2.2.0 <2.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/body-parser"
+ ],
+ "_resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz",
+ "_shasum": "994976cf6a5096a41162840492f0bdc5d6e7fb96",
+ "_shrinkwrap": null,
+ "_spec": "raw-body@~2.2.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/body-parser",
+ "author": {
+ "name": "Jonathan Ong",
+ "email": "me@jongleberry.com",
+ "url": "http://jongleberry.com"
+ },
+ "bugs": {
+ "url": "https://github.com/stream-utils/raw-body/issues"
+ },
+ "contributors": [
+ {
+ "name": "Douglas Christopher Wilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "Raynos",
+ "email": "raynos2@gmail.com"
+ }
+ ],
+ "dependencies": {
+ "bytes": "2.4.0",
+ "iconv-lite": "0.4.15",
+ "unpipe": "1.0.0"
+ },
+ "description": "Get and validate the raw body of a readable stream.",
+ "devDependencies": {
+ "bluebird": "3.4.7",
+ "eslint": "3.12.2",
+ "eslint-config-standard": "6.2.1",
+ "eslint-plugin-markdown": "1.0.0-beta.3",
+ "eslint-plugin-promise": "3.4.0",
+ "eslint-plugin-standard": "2.0.1",
+ "istanbul": "0.4.5",
+ "mocha": "2.5.3",
+ "readable-stream": "2.1.2",
+ "through2": "2.0.1"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "994976cf6a5096a41162840492f0bdc5d6e7fb96",
+ "tarball": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "README.md",
+ "index.js"
+ ],
+ "gitHead": "02fac48ae40b8452629bcd310d19dbea543f7c3c",
+ "homepage": "https://github.com/stream-utils/raw-body#readme",
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "dougwilson",
+ "email": "doug@somethingdoug.com"
+ },
+ {
+ "name": "jongleberry",
+ "email": "jonathanrichardong@gmail.com"
+ }
+ ],
+ "name": "raw-body",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/stream-utils/raw-body.git"
+ },
+ "scripts": {
+ "lint": "eslint --plugin markdown --ext js,md .",
+ "test": "mocha --trace-deprecation --reporter spec --bail --check-leaks test/",
+ "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --trace-deprecation --reporter dot --check-leaks test/",
+ "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --trace-deprecation --reporter spec --check-leaks test/"
+ },
+ "version": "2.2.0"
+}
diff --git a/node_modules/read-pkg-up/index.js b/node_modules/read-pkg-up/index.js
new file mode 100644
index 0000000..beb3d48
--- /dev/null
+++ b/node_modules/read-pkg-up/index.js
@@ -0,0 +1,31 @@
+'use strict';
+var findUp = require('find-up');
+var readPkg = require('read-pkg');
+
+module.exports = function (opts) {
+ return findUp('package.json', opts).then(function (fp) {
+ if (!fp) {
+ return {};
+ }
+
+ return readPkg(fp, opts).then(function (pkg) {
+ return {
+ pkg: pkg,
+ path: fp
+ };
+ });
+ });
+};
+
+module.exports.sync = function (opts) {
+ var fp = findUp.sync('package.json', opts);
+
+ if (!fp) {
+ return {};
+ }
+
+ return {
+ pkg: readPkg.sync(fp, opts),
+ path: fp
+ };
+};
diff --git a/node_modules/read-pkg-up/license b/node_modules/read-pkg-up/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/read-pkg-up/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/read-pkg-up/package.json b/node_modules/read-pkg-up/package.json
new file mode 100644
index 0000000..ebd72b2
--- /dev/null
+++ b/node_modules/read-pkg-up/package.json
@@ -0,0 +1,122 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "read-pkg-up@^1.0.1",
+ "scope": null,
+ "escapedName": "read-pkg-up",
+ "name": "read-pkg-up",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs"
+ ]
+ ],
+ "_from": "read-pkg-up@>=1.0.1 <2.0.0",
+ "_id": "read-pkg-up@1.0.1",
+ "_inCache": true,
+ "_location": "/read-pkg-up",
+ "_nodeVersion": "0.12.7",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.11.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "read-pkg-up@^1.0.1",
+ "scope": null,
+ "escapedName": "read-pkg-up",
+ "name": "read-pkg-up",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/sequelize-cli/yargs"
+ ],
+ "_resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "_shasum": "9d63c13276c065918d57f002a57f40a1b643fb02",
+ "_shrinkwrap": null,
+ "_spec": "read-pkg-up@^1.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/read-pkg-up/issues"
+ },
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "description": "Read the closest package.json file",
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "9d63c13276c065918d57f002a57f40a1b643fb02",
+ "tarball": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "27ec7c844b495a39eea7859c5f4d4721ebf60e8e",
+ "homepage": "https://github.com/sindresorhus/read-pkg-up",
+ "keywords": [
+ "json",
+ "read",
+ "parse",
+ "file",
+ "fs",
+ "graceful",
+ "load",
+ "pkg",
+ "package",
+ "find",
+ "up",
+ "find-up",
+ "findup",
+ "look-up",
+ "look",
+ "file",
+ "search",
+ "match",
+ "package",
+ "resolve",
+ "parent",
+ "parents",
+ "folder",
+ "directory",
+ "dir",
+ "walk",
+ "walking",
+ "path"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "read-pkg-up",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/read-pkg-up.git"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "version": "1.0.1"
+}
diff --git a/node_modules/read-pkg-up/readme.md b/node_modules/read-pkg-up/readme.md
new file mode 100644
index 0000000..dbd88f3
--- /dev/null
+++ b/node_modules/read-pkg-up/readme.md
@@ -0,0 +1,79 @@
+# read-pkg-up [](https://travis-ci.org/sindresorhus/read-pkg-up)
+
+> Read the closest package.json file
+
+
+## Why
+
+- [Finds the closest package.json](https://github.com/sindresorhus/find-up)
+- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs)
+- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom)
+- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json)
+- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails)
+
+
+## Install
+
+```
+$ npm install --save read-pkg-up
+```
+
+
+## Usage
+
+```js
+var readPkgUp = require('read-pkg-up');
+
+readPkgUp().then(function (result) {
+ console.log(result);
+ /*
+ {
+ pkg: {
+ name: 'awesome-package',
+ version: '1.0.0',
+ ...
+ },
+ path: '/Users/sindresorhus/dev/awesome-package'
+ }
+ */
+});
+```
+
+
+## API
+
+### readPkgUp([options])
+
+Returns a promise that resolves to a result object.
+
+### readPkgUp.sync([options])
+
+Returns a result object.
+
+#### options
+
+##### cwd
+
+Type: `string`
+Default: `.`
+
+Directory to start looking for a package.json file.
+
+##### normalize
+
+Type: `boolean`
+Default: `true`
+
+[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data.
+
+
+## Related
+
+- [read-pkg](https://github.com/sindresorhus/read-pkg) - Read a package.json file
+- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories
+- [pkg-conf](https://github.com/sindresorhus/pkg-conf) - Get namespaced config from the closest package.json
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/read-pkg/index.js b/node_modules/read-pkg/index.js
new file mode 100644
index 0000000..c5c3afa
--- /dev/null
+++ b/node_modules/read-pkg/index.js
@@ -0,0 +1,48 @@
+'use strict';
+var path = require('path');
+var loadJsonFile = require('load-json-file');
+var normalizePackageData = require('normalize-package-data');
+var pathType = require('path-type');
+
+module.exports = function (fp, opts) {
+ if (typeof fp !== 'string') {
+ opts = fp;
+ fp = '.';
+ }
+
+ opts = opts || {};
+
+ return pathType.dir(fp)
+ .then(function (isDir) {
+ if (isDir) {
+ fp = path.join(fp, 'package.json');
+ }
+
+ return loadJsonFile(fp);
+ })
+ .then(function (x) {
+ if (opts.normalize !== false) {
+ normalizePackageData(x);
+ }
+
+ return x;
+ });
+};
+
+module.exports.sync = function (fp, opts) {
+ if (typeof fp !== 'string') {
+ opts = fp;
+ fp = '.';
+ }
+
+ opts = opts || {};
+ fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp;
+
+ var x = loadJsonFile.sync(fp);
+
+ if (opts.normalize !== false) {
+ normalizePackageData(x);
+ }
+
+ return x;
+};
diff --git a/node_modules/read-pkg/license b/node_modules/read-pkg/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/read-pkg/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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.
diff --git a/node_modules/read-pkg/package.json b/node_modules/read-pkg/package.json
new file mode 100644
index 0000000..e46c164
--- /dev/null
+++ b/node_modules/read-pkg/package.json
@@ -0,0 +1,105 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "read-pkg@^1.0.0",
+ "scope": null,
+ "escapedName": "read-pkg",
+ "name": "read-pkg",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/read-pkg-up"
+ ]
+ ],
+ "_from": "read-pkg@>=1.0.0 <2.0.0",
+ "_id": "read-pkg@1.1.0",
+ "_inCache": true,
+ "_location": "/read-pkg",
+ "_nodeVersion": "3.0.0",
+ "_npmUser": {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ },
+ "_npmVersion": "2.13.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "read-pkg@^1.0.0",
+ "scope": null,
+ "escapedName": "read-pkg",
+ "name": "read-pkg",
+ "rawSpec": "^1.0.0",
+ "spec": ">=1.0.0 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/read-pkg-up"
+ ],
+ "_resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "_shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28",
+ "_shrinkwrap": null,
+ "_spec": "read-pkg@^1.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/read-pkg-up",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "bugs": {
+ "url": "https://github.com/sindresorhus/read-pkg/issues"
+ },
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "description": "Read a package.json file",
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28",
+ "tarball": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "9448d32b2ebcd65fc0547def3cfe5b28ef522e68",
+ "homepage": "https://github.com/sindresorhus/read-pkg",
+ "keywords": [
+ "json",
+ "read",
+ "parse",
+ "file",
+ "fs",
+ "graceful",
+ "load",
+ "pkg",
+ "package",
+ "normalize"
+ ],
+ "license": "MIT",
+ "maintainers": [
+ {
+ "name": "sindresorhus",
+ "email": "sindresorhus@gmail.com"
+ }
+ ],
+ "name": "read-pkg",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sindresorhus/read-pkg.git"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "version": "1.1.0"
+}
diff --git a/node_modules/read-pkg/readme.md b/node_modules/read-pkg/readme.md
new file mode 100644
index 0000000..9a0d4cc
--- /dev/null
+++ b/node_modules/read-pkg/readme.md
@@ -0,0 +1,79 @@
+# read-pkg [](https://travis-ci.org/sindresorhus/read-pkg)
+
+> Read a package.json file
+
+
+## Why
+
+- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs)
+- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom)
+- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json)
+- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails)
+
+
+## Install
+
+```
+$ npm install --save read-pkg
+```
+
+
+## Usage
+
+```js
+var readPkg = require('read-pkg');
+
+readPkg().then(function (pkg) {
+ console.log(pkg);
+ //=> {name: 'read-pkg', ...}
+});
+
+readPkg(__dirname).then(function (pkg) {
+ console.log(pkg);
+ //=> {name: 'read-pkg', ...}
+});
+
+readPkg(path.join('unicorn', 'package.json')).then(function (pkg) {
+ console.log(pkg);
+ //=> {name: 'read-pkg', ...}
+});
+```
+
+
+## API
+
+### readPkg([path], [options])
+
+Returns a promise that resolves to the parsed JSON.
+
+### readPkg.sync([path], [options])
+
+Returns the parsed JSON.
+
+#### path
+
+Type: `string`
+Default: `.`
+
+Path to a `package.json` file or its directory.
+
+#### options
+
+##### normalize
+
+Type: `boolean`
+Default: `true`
+
+[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data.
+
+
+## Related
+
+- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file
+- [write-pkg](https://github.com/sindresorhus/write-pkg) - Write a `package.json` file
+- [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/readable-stream/.npmignore b/node_modules/readable-stream/.npmignore
new file mode 100644
index 0000000..38344f8
--- /dev/null
+++ b/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/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE
new file mode 100644
index 0000000..e3d4e69
--- /dev/null
+++ b/node_modules/readable-stream/LICENSE
@@ -0,0 +1,18 @@
+Copyright Joyent, Inc. and other Node 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.
diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md
new file mode 100644
index 0000000..e46b823
--- /dev/null
+++ b/node_modules/readable-stream/README.md
@@ -0,0 +1,15 @@
+# readable-stream
+
+***Node-core streams for userland***
+
+[](https://nodei.co/npm/readable-stream/)
+[](https://nodei.co/npm/readable-stream/)
+
+This package is a mirror of the Streams2 and Streams3 implementations in Node-core.
+
+If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core.
+
+**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12.
+
+**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"`
+
diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js
new file mode 100644
index 0000000..ca807af
--- /dev/null
+++ b/node_modules/readable-stream/duplex.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_duplex.js")
diff --git a/node_modules/readable-stream/float.patch b/node_modules/readable-stream/float.patch
new file mode 100644
index 0000000..b984607
--- /dev/null
+++ b/node_modules/readable-stream/float.patch
@@ -0,0 +1,923 @@
+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 0c3fe3e..90a8298 100644
+--- a/lib/_stream_readable.js
++++ b/lib/_stream_readable.js
+@@ -23,10 +23,34 @@ module.exports = Readable;
+ Readable.ReadableState = ReadableState;
+
+ var EE = require('events').EventEmitter;
++if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
++ return emitter.listeners(type).length;
++};
++
++if (!global.setImmediate) global.setImmediate = function setImmediate(fn) {
++ return setTimeout(fn, 0);
++};
++if (!global.clearImmediate) global.clearImmediate = function clearImmediate(i) {
++ return clearTimeout(i);
++};
++
+ var Stream = require('stream');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var StringDecoder;
+-var debug = util.debuglog('stream');
++var debug;
++if (util.debuglog)
++ debug = util.debuglog('stream');
++else try {
++ debug = require('debuglog')('stream');
++} catch (er) {
++ debug = function() {};
++}
+
+ util.inherits(Readable, Stream);
+
+@@ -380,7 +404,7 @@ function chunkInvalid(state, chunk) {
+
+
+ function onEofChunk(stream, state) {
+- if (state.decoder && !state.ended) {
++ if (state.decoder && !state.ended && state.decoder.end) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+diff --git a/lib/_stream_transform.js b/lib/_stream_transform.js
+index b1f9fcc..b0caf57 100644
+--- a/lib/_stream_transform.js
++++ b/lib/_stream_transform.js
+@@ -64,8 +64,14 @@
+
+ module.exports = Transform;
+
+-var Duplex = require('_stream_duplex');
++var Duplex = require('./_stream_duplex');
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ util.inherits(Transform, Duplex);
+
+
+diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js
+index ba2e920..f49288b 100644
+--- a/lib/_stream_writable.js
++++ b/lib/_stream_writable.js
+@@ -27,6 +27,12 @@ module.exports = Writable;
+ Writable.WritableState = WritableState;
+
+ var util = require('util');
++if (!util.isUndefined) {
++ var utilIs = require('core-util-is');
++ for (var f in utilIs) {
++ util[f] = utilIs[f];
++ }
++}
+ var Stream = require('stream');
+
+ util.inherits(Writable, Stream);
+@@ -119,7 +125,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/test/simple/test-stream-big-push.js b/test/simple/test-stream-big-push.js
+index e3787e4..8cd2127 100644
+--- a/test/simple/test-stream-big-push.js
++++ b/test/simple/test-stream-big-push.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var str = 'asdfasdfasdfasdfasdf';
+
+ var r = new stream.Readable({
+diff --git a/test/simple/test-stream-end-paused.js b/test/simple/test-stream-end-paused.js
+index bb73777..d40efc7 100644
+--- a/test/simple/test-stream-end-paused.js
++++ b/test/simple/test-stream-end-paused.js
+@@ -25,7 +25,7 @@ var gotEnd = false;
+
+ // Make sure we don't miss the end event for paused 0-length streams
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var stream = new Readable();
+ var calledRead = false;
+ stream._read = function() {
+diff --git a/test/simple/test-stream-pipe-after-end.js b/test/simple/test-stream-pipe-after-end.js
+index b46ee90..0be8366 100644
+--- a/test/simple/test-stream-pipe-after-end.js
++++ b/test/simple/test-stream-pipe-after-end.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var util = require('util');
+
+ util.inherits(TestReadable, Readable);
+diff --git a/test/simple/test-stream-pipe-cleanup.js b/test/simple/test-stream-pipe-cleanup.js
+deleted file mode 100644
+index f689358..0000000
+--- a/test/simple/test-stream-pipe-cleanup.js
++++ /dev/null
+@@ -1,122 +0,0 @@
+-// 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.
+-
+-// This test asserts that Stream.prototype.pipe does not leave listeners
+-// hanging on the source or dest.
+-
+-var common = require('../common');
+-var stream = require('stream');
+-var assert = require('assert');
+-var util = require('util');
+-
+-function Writable() {
+- this.writable = true;
+- this.endCalls = 0;
+- stream.Stream.call(this);
+-}
+-util.inherits(Writable, stream.Stream);
+-Writable.prototype.end = function() {
+- this.endCalls++;
+-};
+-
+-Writable.prototype.destroy = function() {
+- this.endCalls++;
+-};
+-
+-function Readable() {
+- this.readable = true;
+- stream.Stream.call(this);
+-}
+-util.inherits(Readable, stream.Stream);
+-
+-function Duplex() {
+- this.readable = true;
+- Writable.call(this);
+-}
+-util.inherits(Duplex, Writable);
+-
+-var i = 0;
+-var limit = 100;
+-
+-var w = new Writable();
+-
+-var r;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('end');
+-}
+-assert.equal(0, r.listeners('end').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-for (i = 0; i < limit; i++) {
+- r = new Readable();
+- r.pipe(w);
+- r.emit('close');
+-}
+-assert.equal(0, r.listeners('close').length);
+-assert.equal(limit, w.endCalls);
+-
+-w.endCalls = 0;
+-
+-r = new Readable();
+-
+-for (i = 0; i < limit; i++) {
+- w = new Writable();
+- r.pipe(w);
+- w.emit('close');
+-}
+-assert.equal(0, w.listeners('close').length);
+-
+-r = new Readable();
+-w = new Writable();
+-var d = new Duplex();
+-r.pipe(d); // pipeline A
+-d.pipe(w); // pipeline B
+-assert.equal(r.listeners('end').length, 2); // A.onend, A.cleanup
+-assert.equal(r.listeners('close').length, 2); // A.onclose, A.cleanup
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 3); // A.cleanup, B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-r.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 0);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 2); // B.onend, B.cleanup
+-assert.equal(d.listeners('close').length, 2); // B.onclose, B.cleanup
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 1); // B.cleanup
+-
+-d.emit('end');
+-assert.equal(d.endCalls, 1);
+-assert.equal(w.endCalls, 1);
+-assert.equal(r.listeners('end').length, 0);
+-assert.equal(r.listeners('close').length, 0);
+-assert.equal(d.listeners('end').length, 0);
+-assert.equal(d.listeners('close').length, 0);
+-assert.equal(w.listeners('end').length, 0);
+-assert.equal(w.listeners('close').length, 0);
+diff --git a/test/simple/test-stream-pipe-error-handling.js b/test/simple/test-stream-pipe-error-handling.js
+index c5d724b..c7d6b7d 100644
+--- a/test/simple/test-stream-pipe-error-handling.js
++++ b/test/simple/test-stream-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Stream = require('stream').Stream;
++var Stream = require('../../').Stream;
+
+ (function testErrorListenerCatches() {
+ var source = new Stream();
+diff --git a/test/simple/test-stream-pipe-event.js b/test/simple/test-stream-pipe-event.js
+index cb9d5fe..56f8d61 100644
+--- a/test/simple/test-stream-pipe-event.js
++++ b/test/simple/test-stream-pipe-event.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common');
+-var stream = require('stream');
++var stream = require('../../');
+ var assert = require('assert');
+ var util = require('util');
+
+diff --git a/test/simple/test-stream-push-order.js b/test/simple/test-stream-push-order.js
+index f2e6ec2..a5c9bf9 100644
+--- a/test/simple/test-stream-push-order.js
++++ b/test/simple/test-stream-push-order.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var assert = require('assert');
+
+ var s = new Readable({
+diff --git a/test/simple/test-stream-push-strings.js b/test/simple/test-stream-push-strings.js
+index 06f43dc..1701a9a 100644
+--- a/test/simple/test-stream-push-strings.js
++++ b/test/simple/test-stream-push-strings.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var util = require('util');
+
+ util.inherits(MyStream, Readable);
+diff --git a/test/simple/test-stream-readable-event.js b/test/simple/test-stream-readable-event.js
+index ba6a577..a8e6f7b 100644
+--- a/test/simple/test-stream-readable-event.js
++++ b/test/simple/test-stream-readable-event.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ (function first() {
+ // First test, not reading when the readable is added.
+diff --git a/test/simple/test-stream-readable-flow-recursion.js b/test/simple/test-stream-readable-flow-recursion.js
+index 2891ad6..11689ba 100644
+--- a/test/simple/test-stream-readable-flow-recursion.js
++++ b/test/simple/test-stream-readable-flow-recursion.js
+@@ -27,7 +27,7 @@ var assert = require('assert');
+ // more data continuously, but without triggering a nextTick
+ // warning or RangeError.
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ // throw an error if we trigger a nextTick warning.
+ process.throwDeprecation = true;
+diff --git a/test/simple/test-stream-unshift-empty-chunk.js b/test/simple/test-stream-unshift-empty-chunk.js
+index 0c96476..7827538 100644
+--- a/test/simple/test-stream-unshift-empty-chunk.js
++++ b/test/simple/test-stream-unshift-empty-chunk.js
+@@ -24,7 +24,7 @@ var assert = require('assert');
+
+ // This test verifies that stream.unshift(Buffer(0)) or
+ // stream.unshift('') does not set state.reading=false.
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ var r = new Readable();
+ var nChunks = 10;
+diff --git a/test/simple/test-stream-unshift-read-race.js b/test/simple/test-stream-unshift-read-race.js
+index 83fd9fa..17c18aa 100644
+--- a/test/simple/test-stream-unshift-read-race.js
++++ b/test/simple/test-stream-unshift-read-race.js
+@@ -29,7 +29,7 @@ var assert = require('assert');
+ // 3. push() after the EOF signaling null is an error.
+ // 4. _read() is not called after pushing the EOF null chunk.
+
+-var stream = require('stream');
++var stream = require('../../');
+ var hwm = 10;
+ var r = stream.Readable({ highWaterMark: hwm });
+ var chunks = 10;
+@@ -51,7 +51,14 @@ r._read = function(n) {
+
+ function push(fast) {
+ assert(!pushedNull, 'push() after null push');
+- var c = pos >= data.length ? null : data.slice(pos, pos + n);
++ var c;
++ if (pos >= data.length)
++ c = null;
++ else {
++ if (n + pos > data.length)
++ n = data.length - pos;
++ c = data.slice(pos, pos + n);
++ }
+ pushedNull = c === null;
+ if (fast) {
+ pos += n;
+diff --git a/test/simple/test-stream-writev.js b/test/simple/test-stream-writev.js
+index 5b49e6e..b5321f3 100644
+--- a/test/simple/test-stream-writev.js
++++ b/test/simple/test-stream-writev.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+
+ var queue = [];
+ for (var decode = 0; decode < 2; decode++) {
+diff --git a/test/simple/test-stream2-basic.js b/test/simple/test-stream2-basic.js
+index 3814bf0..248c1be 100644
+--- a/test/simple/test-stream2-basic.js
++++ b/test/simple/test-stream2-basic.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-compatibility.js b/test/simple/test-stream2-compatibility.js
+index 6cdd4e9..f0fa84b 100644
+--- a/test/simple/test-stream2-compatibility.js
++++ b/test/simple/test-stream2-compatibility.js
+@@ -21,7 +21,7 @@
+
+
+ var common = require('../common.js');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-finish-pipe.js b/test/simple/test-stream2-finish-pipe.js
+index 39b274f..006a19b 100644
+--- a/test/simple/test-stream2-finish-pipe.js
++++ b/test/simple/test-stream2-finish-pipe.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Buffer = require('buffer').Buffer;
+
+ var r = new stream.Readable();
+diff --git a/test/simple/test-stream2-fs.js b/test/simple/test-stream2-fs.js
+deleted file mode 100644
+index e162406..0000000
+--- a/test/simple/test-stream2-fs.js
++++ /dev/null
+@@ -1,72 +0,0 @@
+-// 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.
+-
+-
+-var common = require('../common.js');
+-var R = require('_stream_readable');
+-var assert = require('assert');
+-
+-var fs = require('fs');
+-var FSReadable = fs.ReadStream;
+-
+-var path = require('path');
+-var file = path.resolve(common.fixturesDir, 'x1024.txt');
+-
+-var size = fs.statSync(file).size;
+-
+-var expectLengths = [1024];
+-
+-var util = require('util');
+-var Stream = require('stream');
+-
+-util.inherits(TestWriter, Stream);
+-
+-function TestWriter() {
+- Stream.apply(this);
+- this.buffer = [];
+- this.length = 0;
+-}
+-
+-TestWriter.prototype.write = function(c) {
+- this.buffer.push(c.toString());
+- this.length += c.length;
+- return true;
+-};
+-
+-TestWriter.prototype.end = function(c) {
+- if (c) this.buffer.push(c.toString());
+- this.emit('results', this.buffer);
+-}
+-
+-var r = new FSReadable(file);
+-var w = new TestWriter();
+-
+-w.on('results', function(res) {
+- console.error(res, w.length);
+- assert.equal(w.length, size);
+- var l = 0;
+- assert.deepEqual(res.map(function (c) {
+- return c.length;
+- }), expectLengths);
+- console.log('ok');
+-});
+-
+-r.pipe(w);
+diff --git a/test/simple/test-stream2-httpclient-response-end.js b/test/simple/test-stream2-httpclient-response-end.js
+deleted file mode 100644
+index 15cffc2..0000000
+--- a/test/simple/test-stream2-httpclient-response-end.js
++++ /dev/null
+@@ -1,52 +0,0 @@
+-// 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.
+-
+-var common = require('../common.js');
+-var assert = require('assert');
+-var http = require('http');
+-var msg = 'Hello';
+-var readable_event = false;
+-var end_event = false;
+-var server = http.createServer(function(req, res) {
+- res.writeHead(200, {'Content-Type': 'text/plain'});
+- res.end(msg);
+-}).listen(common.PORT, function() {
+- http.get({port: common.PORT}, function(res) {
+- var data = '';
+- res.on('readable', function() {
+- console.log('readable event');
+- readable_event = true;
+- data += res.read();
+- });
+- res.on('end', function() {
+- console.log('end event');
+- end_event = true;
+- assert.strictEqual(msg, data);
+- server.close();
+- });
+- });
+-});
+-
+-process.on('exit', function() {
+- assert(readable_event);
+- assert(end_event);
+-});
+-
+diff --git a/test/simple/test-stream2-large-read-stall.js b/test/simple/test-stream2-large-read-stall.js
+index 2fbfbca..667985b 100644
+--- a/test/simple/test-stream2-large-read-stall.js
++++ b/test/simple/test-stream2-large-read-stall.js
+@@ -30,7 +30,7 @@ var PUSHSIZE = 20;
+ var PUSHCOUNT = 1000;
+ var HWM = 50;
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable({
+ highWaterMark: HWM
+ });
+@@ -39,23 +39,23 @@ var rs = r._readableState;
+ r._read = push;
+
+ r.on('readable', function() {
+- console.error('>> readable');
++ //console.error('>> readable');
+ do {
+- console.error(' > read(%d)', READSIZE);
++ //console.error(' > read(%d)', READSIZE);
+ var ret = r.read(READSIZE);
+- console.error(' < %j (%d remain)', ret && ret.length, rs.length);
++ //console.error(' < %j (%d remain)', ret && ret.length, rs.length);
+ } while (ret && ret.length === READSIZE);
+
+- console.error('<< after read()',
+- ret && ret.length,
+- rs.needReadable,
+- rs.length);
++ //console.error('<< after read()',
++ // ret && ret.length,
++ // rs.needReadable,
++ // rs.length);
+ });
+
+ var endEmitted = false;
+ r.on('end', function() {
+ endEmitted = true;
+- console.error('end');
++ //console.error('end');
+ });
+
+ var pushes = 0;
+@@ -64,11 +64,11 @@ function push() {
+ return;
+
+ if (pushes++ === PUSHCOUNT) {
+- console.error(' push(EOF)');
++ //console.error(' push(EOF)');
+ return r.push(null);
+ }
+
+- console.error(' push #%d', pushes);
++ //console.error(' push #%d', pushes);
+ if (r.push(new Buffer(PUSHSIZE)))
+ setTimeout(push);
+ }
+diff --git a/test/simple/test-stream2-objects.js b/test/simple/test-stream2-objects.js
+index 3e6931d..ff47d89 100644
+--- a/test/simple/test-stream2-objects.js
++++ b/test/simple/test-stream2-objects.js
+@@ -21,8 +21,8 @@
+
+
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var assert = require('assert');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-pipe-error-handling.js b/test/simple/test-stream2-pipe-error-handling.js
+index cf7531c..e3f3e4e 100644
+--- a/test/simple/test-stream2-pipe-error-handling.js
++++ b/test/simple/test-stream2-pipe-error-handling.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ (function testErrorListenerCatches() {
+ var count = 1000;
+diff --git a/test/simple/test-stream2-pipe-error-once-listener.js b/test/simple/test-stream2-pipe-error-once-listener.js
+index 5e8e3cb..53b2616 100755
+--- a/test/simple/test-stream2-pipe-error-once-listener.js
++++ b/test/simple/test-stream2-pipe-error-once-listener.js
+@@ -24,7 +24,7 @@ var common = require('../common.js');
+ var assert = require('assert');
+
+ var util = require('util');
+-var stream = require('stream');
++var stream = require('../../');
+
+
+ var Read = function() {
+diff --git a/test/simple/test-stream2-push.js b/test/simple/test-stream2-push.js
+index b63edc3..eb2b0e9 100644
+--- a/test/simple/test-stream2-push.js
++++ b/test/simple/test-stream2-push.js
+@@ -20,7 +20,7 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+ var assert = require('assert');
+diff --git a/test/simple/test-stream2-read-sync-stack.js b/test/simple/test-stream2-read-sync-stack.js
+index e8a7305..9740a47 100644
+--- a/test/simple/test-stream2-read-sync-stack.js
++++ b/test/simple/test-stream2-read-sync-stack.js
+@@ -21,7 +21,7 @@
+
+ var common = require('../common');
+ var assert = require('assert');
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+ var r = new Readable();
+ var N = 256 * 1024;
+
+diff --git a/test/simple/test-stream2-readable-empty-buffer-no-eof.js b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+index cd30178..4b1659d 100644
+--- a/test/simple/test-stream2-readable-empty-buffer-no-eof.js
++++ b/test/simple/test-stream2-readable-empty-buffer-no-eof.js
+@@ -22,10 +22,9 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('stream').Readable;
++var Readable = require('../../').Readable;
+
+ test1();
+-test2();
+
+ function test1() {
+ var r = new Readable();
+@@ -88,31 +87,3 @@ function test1() {
+ console.log('ok');
+ });
+ }
+-
+-function test2() {
+- var r = new Readable({ encoding: 'base64' });
+- var reads = 5;
+- r._read = function(n) {
+- if (!reads--)
+- return r.push(null); // EOF
+- else
+- return r.push(new Buffer('x'));
+- };
+-
+- var results = [];
+- function flow() {
+- var chunk;
+- while (null !== (chunk = r.read()))
+- results.push(chunk + '');
+- }
+- r.on('readable', flow);
+- r.on('end', function() {
+- results.push('EOF');
+- });
+- flow();
+-
+- process.on('exit', function() {
+- assert.deepEqual(results, [ 'eHh4', 'eHg=', 'EOF' ]);
+- console.log('ok');
+- });
+-}
+diff --git a/test/simple/test-stream2-readable-from-list.js b/test/simple/test-stream2-readable-from-list.js
+index 7c96ffe..04a96f5 100644
+--- a/test/simple/test-stream2-readable-from-list.js
++++ b/test/simple/test-stream2-readable-from-list.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var fromList = require('_stream_readable')._fromList;
++var fromList = require('../../lib/_stream_readable')._fromList;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-readable-legacy-drain.js b/test/simple/test-stream2-readable-legacy-drain.js
+index 675da8e..51fd3d5 100644
+--- a/test/simple/test-stream2-readable-legacy-drain.js
++++ b/test/simple/test-stream2-readable-legacy-drain.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Stream = require('stream');
++var Stream = require('../../');
+ var Readable = Stream.Readable;
+
+ var r = new Readable();
+diff --git a/test/simple/test-stream2-readable-non-empty-end.js b/test/simple/test-stream2-readable-non-empty-end.js
+index 7314ae7..c971898 100644
+--- a/test/simple/test-stream2-readable-non-empty-end.js
++++ b/test/simple/test-stream2-readable-non-empty-end.js
+@@ -21,7 +21,7 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+
+ var len = 0;
+ var chunks = new Array(10);
+diff --git a/test/simple/test-stream2-readable-wrap-empty.js b/test/simple/test-stream2-readable-wrap-empty.js
+index 2e5cf25..fd8a3dc 100644
+--- a/test/simple/test-stream2-readable-wrap-empty.js
++++ b/test/simple/test-stream2-readable-wrap-empty.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
++var Readable = require('../../lib/_stream_readable');
+ var EE = require('events').EventEmitter;
+
+ var oldStream = new EE();
+diff --git a/test/simple/test-stream2-readable-wrap.js b/test/simple/test-stream2-readable-wrap.js
+index 90eea01..6b177f7 100644
+--- a/test/simple/test-stream2-readable-wrap.js
++++ b/test/simple/test-stream2-readable-wrap.js
+@@ -22,8 +22,8 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var Readable = require('_stream_readable');
+-var Writable = require('_stream_writable');
++var Readable = require('../../lib/_stream_readable');
++var Writable = require('../../lib/_stream_writable');
+ var EE = require('events').EventEmitter;
+
+ var testRuns = 0, completedRuns = 0;
+diff --git a/test/simple/test-stream2-set-encoding.js b/test/simple/test-stream2-set-encoding.js
+index 5d2c32a..685531b 100644
+--- a/test/simple/test-stream2-set-encoding.js
++++ b/test/simple/test-stream2-set-encoding.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var R = require('_stream_readable');
++var R = require('../../lib/_stream_readable');
+ var util = require('util');
+
+ // tiny node-tap lookalike.
+diff --git a/test/simple/test-stream2-transform.js b/test/simple/test-stream2-transform.js
+index 9c9ddd8..a0cacc6 100644
+--- a/test/simple/test-stream2-transform.js
++++ b/test/simple/test-stream2-transform.js
+@@ -21,8 +21,8 @@
+
+ var assert = require('assert');
+ var common = require('../common.js');
+-var PassThrough = require('_stream_passthrough');
+-var Transform = require('_stream_transform');
++var PassThrough = require('../../').PassThrough;
++var Transform = require('../../').Transform;
+
+ // tiny node-tap lookalike.
+ var tests = [];
+diff --git a/test/simple/test-stream2-unpipe-drain.js b/test/simple/test-stream2-unpipe-drain.js
+index d66dc3c..365b327 100644
+--- a/test/simple/test-stream2-unpipe-drain.js
++++ b/test/simple/test-stream2-unpipe-drain.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+ var crypto = require('crypto');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream2-unpipe-leak.js b/test/simple/test-stream2-unpipe-leak.js
+index 99f8746..17c92ae 100644
+--- a/test/simple/test-stream2-unpipe-leak.js
++++ b/test/simple/test-stream2-unpipe-leak.js
+@@ -22,7 +22,7 @@
+
+ var common = require('../common.js');
+ var assert = require('assert');
+-var stream = require('stream');
++var stream = require('../../');
+
+ var chunk = new Buffer('hallo');
+
+diff --git a/test/simple/test-stream2-writable.js b/test/simple/test-stream2-writable.js
+index 704100c..209c3a6 100644
+--- a/test/simple/test-stream2-writable.js
++++ b/test/simple/test-stream2-writable.js
+@@ -20,8 +20,8 @@
+ // USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ var common = require('../common.js');
+-var W = require('_stream_writable');
+-var D = require('_stream_duplex');
++var W = require('../../').Writable;
++var D = require('../../').Duplex;
+ var assert = require('assert');
+
+ var util = require('util');
+diff --git a/test/simple/test-stream3-pause-then-read.js b/test/simple/test-stream3-pause-then-read.js
+index b91bde3..2f72c15 100644
+--- a/test/simple/test-stream3-pause-then-read.js
++++ b/test/simple/test-stream3-pause-then-read.js
+@@ -22,7 +22,7 @@
+ var common = require('../common');
+ var assert = require('assert');
+
+-var stream = require('stream');
++var stream = require('../../');
+ var Readable = stream.Readable;
+ var Writable = stream.Writable;
+
diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js
new file mode 100644
index 0000000..b513d61
--- /dev/null
+++ b/node_modules/readable-stream/lib/_stream_duplex.js
@@ -0,0 +1,89 @@
+// 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 objectKeys = Object.keys || function (obj) {
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ return keys;
+}
+/* */
+
+
+/**/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/* */
+
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+forEach(objectKeys(Writable.prototype), 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));
+}
+
+function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js
new file mode 100644
index 0000000..895ca50
--- /dev/null
+++ b/node_modules/readable-stream/lib/_stream_passthrough.js
@@ -0,0 +1,46 @@
+// 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('core-util-is');
+util.inherits = require('inherits');
+/* */
+
+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/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js
new file mode 100644
index 0000000..19ab358
--- /dev/null
+++ b/node_modules/readable-stream/lib/_stream_readable.js
@@ -0,0 +1,951 @@
+// 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;
+
+/**/
+var isArray = require('isarray');
+/* */
+
+
+/**/
+var Buffer = require('buffer').Buffer;
+/* */
+
+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('core-util-is');
+util.inherits = require('inherits');
+/* */
+
+var StringDecoder;
+
+
+/**/
+var debug = require('util');
+if (debug && debug.debuglog) {
+ debug = debug.debuglog('stream');
+} else {
+ debug = function () {};
+}
+/* */
+
+
+util.inherits(Readable, Stream);
+
+function ReadableState(options, stream) {
+ var Duplex = require('./_stream_duplex');
+
+ 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;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // cast to ints.
+ this.highWaterMark = ~~this.highWaterMark;
+
+ this.buffer = [];
+ this.length = 0;
+ this.pipes = null;
+ this.pipesCount = 0;
+ this.flowing = null;
+ this.ended = false;
+ this.endEmitted = false;
+ this.reading = 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, because 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;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+ // 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) {
+ var Duplex = require('./_stream_duplex');
+
+ 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 (util.isString(chunk) && !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 (util.isNullOrUndefined(chunk)) {
+ 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);
+
+ if (!addToFront)
+ state.reading = false;
+
+ // if we want the data now, just emit it.
+ if (state.flowing && state.length === 0 && !state.sync) {
+ stream.emit('data', chunk);
+ stream.read(0);
+ } else {
+ // update the buffer info.
+ state.length += state.objectMode ? 1 : chunk.length;
+ if (addToFront)
+ state.buffer.unshift(chunk);
+ else
+ 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;
+ return this;
+};
+
+// 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) || util.isNull(n)) {
+ // 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) {
+ debug('read', n);
+ var state = this._readableState;
+ var nOrig = n;
+
+ if (!util.isNumber(n) || 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)) {
+ debug('read: emitReadable', state.length, state.ended);
+ if (state.length === 0 && state.ended)
+ endReadable(this);
+ else
+ 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;
+ debug('need readable', doRead);
+
+ // if we currently have less than the highWaterMark, then also read some
+ if (state.length === 0 || state.length - n < state.highWaterMark) {
+ doRead = true;
+ debug('length less than watermark', doRead);
+ }
+
+ // 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;
+ debug('reading or ended', doRead);
+ }
+
+ if (doRead) {
+ debug('do read');
+ 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 pushed data 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 (util.isNull(ret)) {
+ 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 tried to read() past the EOF, then emit end on the next tick.
+ if (nOrig !== n && state.ended && state.length === 0)
+ endReadable(this);
+
+ if (!util.isNull(ret))
+ this.emit('data', ret);
+
+ return ret;
+};
+
+function chunkInvalid(state, chunk) {
+ var er = null;
+ if (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !state.objectMode) {
+ er = new TypeError('Invalid non-string/buffer chunk');
+ }
+ return er;
+}
+
+
+function onEofChunk(stream, state) {
+ if (state.decoder && !state.ended) {
+ var chunk = state.decoder.end();
+ if (chunk && chunk.length) {
+ state.buffer.push(chunk);
+ state.length += state.objectMode ? 1 : chunk.length;
+ }
+ }
+ state.ended = true;
+
+ // emit 'readable' now to make sure it gets picked up.
+ emitReadable(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) {
+ debug('emitReadable', state.flowing);
+ state.emittedReadable = true;
+ if (state.sync)
+ process.nextTick(function() {
+ emitReadable_(stream);
+ });
+ else
+ emitReadable_(stream);
+ }
+}
+
+function emitReadable_(stream) {
+ debug('emit readable');
+ stream.emit('readable');
+ flow(stream);
+}
+
+
+// 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) {
+ debug('maybeReadMore read 0');
+ 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;
+ debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+ 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) {
+ debug('onunpipe');
+ if (readable === src) {
+ cleanup();
+ }
+ }
+
+ function onend() {
+ debug('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() {
+ debug('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);
+ src.removeListener('data', ondata);
+
+ // 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 (state.awaitDrain &&
+ (!dest._writableState || dest._writableState.needDrain))
+ ondrain();
+ }
+
+ src.on('data', ondata);
+ function ondata(chunk) {
+ debug('ondata');
+ var ret = dest.write(chunk);
+ if (false === ret) {
+ debug('false write response, pause',
+ src._readableState.awaitDrain);
+ src._readableState.awaitDrain++;
+ src.pause();
+ }
+ }
+
+ // if the dest has an error, then stop piping into it.
+ // however, don't suppress the throwing behavior for this.
+ function onerror(er) {
+ debug('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 (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() {
+ debug('onfinish');
+ dest.removeListener('close', onclose);
+ unpipe();
+ }
+ dest.once('finish', onfinish);
+
+ function unpipe() {
+ debug('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) {
+ debug('pipe resume');
+ src.resume();
+ }
+
+ return dest;
+};
+
+function pipeOnDrain(src) {
+ return function() {
+ var state = src._readableState;
+ debug('pipeOnDrain', state.awaitDrain);
+ if (state.awaitDrain)
+ state.awaitDrain--;
+ if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+ state.flowing = true;
+ flow(src);
+ }
+ };
+}
+
+
+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;
+ 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;
+ 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 = indexOf(state.pipes, 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 listening to data, and it has not explicitly been paused,
+ // then call resume to start the flow of data on the next tick.
+ if (ev === 'data' && false !== this._readableState.flowing) {
+ this.resume();
+ }
+
+ if (ev === 'readable' && this.readable) {
+ var state = this._readableState;
+ if (!state.readableListening) {
+ state.readableListening = true;
+ state.emittedReadable = false;
+ state.needReadable = true;
+ if (!state.reading) {
+ var self = this;
+ process.nextTick(function() {
+ debug('readable nexttick read 0');
+ self.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() {
+ var state = this._readableState;
+ if (!state.flowing) {
+ debug('resume');
+ state.flowing = true;
+ if (!state.reading) {
+ debug('resume read 0');
+ this.read(0);
+ }
+ resume(this, state);
+ }
+ return this;
+};
+
+function resume(stream, state) {
+ if (!state.resumeScheduled) {
+ state.resumeScheduled = true;
+ process.nextTick(function() {
+ resume_(stream, state);
+ });
+ }
+}
+
+function resume_(stream, state) {
+ state.resumeScheduled = false;
+ stream.emit('resume');
+ flow(stream);
+ if (state.flowing && !state.reading)
+ stream.read(0);
+}
+
+Readable.prototype.pause = function() {
+ debug('call pause flowing=%j', this._readableState.flowing);
+ if (false !== this._readableState.flowing) {
+ debug('pause');
+ this._readableState.flowing = false;
+ this.emit('pause');
+ }
+ return this;
+};
+
+function flow(stream) {
+ var state = stream._readableState;
+ debug('flow', state.flowing);
+ if (state.flowing) {
+ do {
+ var chunk = stream.read();
+ } while (null !== chunk && state.flowing);
+ }
+}
+
+// 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() {
+ debug('wrapped end');
+ 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) {
+ debug('wrapped data');
+ 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 (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+ this[i] = function(method) { return function() {
+ return stream[method].apply(stream, arguments);
+ }}(i);
+ }
+ }
+
+ // proxy certain important events.
+ var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+ forEach(events, 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) {
+ debug('wrapped _read', 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.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');
+ }
+ });
+ }
+}
+
+function forEach (xs, f) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ f(xs[i], i);
+ }
+}
+
+function indexOf (xs, x) {
+ for (var i = 0, l = xs.length; i < l; i++) {
+ if (xs[i] === x) return i;
+ }
+ return -1;
+}
diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js
new file mode 100644
index 0000000..905c5e4
--- /dev/null
+++ b/node_modules/readable-stream/lib/_stream_transform.js
@@ -0,0 +1,209 @@
+// 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('core-util-is');
+util.inherits = require('inherits');
+/* */
+
+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 (!util.isNullOrUndefined(data))
+ 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);
+
+ 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('prefinish', function() {
+ if (util.isFunction(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 (!util.isNull(ts.writechunk) && 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 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/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js
new file mode 100644
index 0000000..db8539c
--- /dev/null
+++ b/node_modules/readable-stream/lib/_stream_writable.js
@@ -0,0 +1,477 @@
+// 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;
+
+/**/
+var Buffer = require('buffer').Buffer;
+/* */
+
+Writable.WritableState = WritableState;
+
+
+/**/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/* */
+
+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) {
+ var Duplex = require('./_stream_duplex');
+
+ 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;
+ var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+ this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+ // object stream flag to indicate whether or not this stream
+ // contains buffers or objects.
+ this.objectMode = !!options.objectMode;
+
+ if (stream instanceof Duplex)
+ this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+ // 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;
+
+ // when true all writes will be buffered until .uncork() call
+ this.corked = 0;
+
+ // 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, because 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 = [];
+
+ // number of pending user-supplied write callbacks
+ // this must be 0 before 'finish' can be emitted
+ this.pendingcb = 0;
+
+ // emit prefinish if the only thing we're waiting for is _write cbs
+ // This is relevant for synchronous Transform streams
+ this.prefinished = false;
+
+ // True if the error was already emitted and should not be thrown again
+ this.errorEmitted = false;
+}
+
+function Writable(options) {
+ var Duplex = require('./_stream_duplex');
+
+ // Writable ctor is applied to Duplexes, though they're not
+ // instanceof Writable, they're instanceof Readable.
+ if (!(this instanceof Writable) && !(this instanceof 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 (!util.isBuffer(chunk) &&
+ !util.isString(chunk) &&
+ !util.isNullOrUndefined(chunk) &&
+ !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 (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (util.isBuffer(chunk))
+ encoding = 'buffer';
+ else if (!encoding)
+ encoding = state.defaultEncoding;
+
+ if (!util.isFunction(cb))
+ cb = function() {};
+
+ if (state.ended)
+ writeAfterEnd(this, state, cb);
+ else if (validChunk(this, state, chunk, cb)) {
+ state.pendingcb++;
+ ret = writeOrBuffer(this, state, chunk, encoding, cb);
+ }
+
+ return ret;
+};
+
+Writable.prototype.cork = function() {
+ var state = this._writableState;
+
+ state.corked++;
+};
+
+Writable.prototype.uncork = function() {
+ var state = this._writableState;
+
+ if (state.corked) {
+ state.corked--;
+
+ if (!state.writing &&
+ !state.corked &&
+ !state.finished &&
+ !state.bufferProcessing &&
+ state.buffer.length)
+ clearBuffer(this, state);
+ }
+};
+
+function decodeChunk(state, chunk, encoding) {
+ if (!state.objectMode &&
+ state.decodeStrings !== false &&
+ util.isString(chunk)) {
+ 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 (util.isBuffer(chunk))
+ encoding = 'buffer';
+ var len = state.objectMode ? 1 : chunk.length;
+
+ state.length += len;
+
+ var ret = state.length < state.highWaterMark;
+ // we must ensure that previous needDrain will not be reset to false.
+ if (!ret)
+ state.needDrain = true;
+
+ if (state.writing || state.corked)
+ state.buffer.push(new WriteReq(chunk, encoding, cb));
+ else
+ doWrite(stream, state, false, len, chunk, encoding, cb);
+
+ return ret;
+}
+
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+ state.writelen = len;
+ state.writecb = cb;
+ state.writing = true;
+ state.sync = true;
+ if (writev)
+ stream._writev(chunk, state.onwrite);
+ else
+ stream._write(chunk, encoding, state.onwrite);
+ state.sync = false;
+}
+
+function onwriteError(stream, state, sync, er, cb) {
+ if (sync)
+ process.nextTick(function() {
+ state.pendingcb--;
+ cb(er);
+ });
+ else {
+ state.pendingcb--;
+ cb(er);
+ }
+
+ stream._writableState.errorEmitted = true;
+ 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.corked &&
+ !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);
+ state.pendingcb--;
+ cb();
+ 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;
+
+ if (stream._writev && state.buffer.length > 1) {
+ // Fast case, write everything using _writev()
+ var cbs = [];
+ for (var c = 0; c < state.buffer.length; c++)
+ cbs.push(state.buffer[c].callback);
+
+ // count the one we are adding, as well.
+ // TODO(isaacs) clean this up
+ state.pendingcb++;
+ doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+ for (var i = 0; i < cbs.length; i++) {
+ state.pendingcb--;
+ cbs[i](err);
+ }
+ });
+
+ // Clear buffer
+ state.buffer = [];
+ } else {
+ // Slow case, write chunks one-by-one
+ 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, false, 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;
+ }
+ }
+
+ if (c < state.buffer.length)
+ state.buffer = state.buffer.slice(c);
+ else
+ state.buffer.length = 0;
+ }
+
+ state.bufferProcessing = false;
+}
+
+Writable.prototype._write = function(chunk, encoding, cb) {
+ cb(new Error('not implemented'));
+
+};
+
+Writable.prototype._writev = null;
+
+Writable.prototype.end = function(chunk, encoding, cb) {
+ var state = this._writableState;
+
+ if (util.isFunction(chunk)) {
+ cb = chunk;
+ chunk = null;
+ encoding = null;
+ } else if (util.isFunction(encoding)) {
+ cb = encoding;
+ encoding = null;
+ }
+
+ if (!util.isNullOrUndefined(chunk))
+ this.write(chunk, encoding);
+
+ // .end() fully uncorks
+ if (state.corked) {
+ state.corked = 1;
+ this.uncork();
+ }
+
+ // 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 prefinish(stream, state) {
+ if (!state.prefinished) {
+ state.prefinished = true;
+ stream.emit('prefinish');
+ }
+}
+
+function finishMaybe(stream, state) {
+ var need = needFinish(stream, state);
+ if (need) {
+ if (state.pendingcb === 0) {
+ prefinish(stream, state);
+ state.finished = true;
+ stream.emit('finish');
+ } else
+ prefinish(stream, state);
+ }
+ 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/node_modules/readable-stream/node_modules/isarray/README.md b/node_modules/readable-stream/node_modules/isarray/README.md
new file mode 100644
index 0000000..052a62b
--- /dev/null
+++ b/node_modules/readable-stream/node_modules/isarray/README.md
@@ -0,0 +1,54 @@
+
+# isarray
+
+`Array#isArray` for older browsers.
+
+## Usage
+
+```js
+var isArray = require('isarray');
+
+console.log(isArray([])); // => true
+console.log(isArray({})); // => false
+```
+
+## Installation
+
+With [npm](http://npmjs.org) do
+
+```bash
+$ npm install isarray
+```
+
+Then bundle for the browser with
+[browserify](https://github.com/substack/browserify).
+
+With [component](http://component.io) do
+
+```bash
+$ component install juliangruber/isarray
+```
+
+## License
+
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.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.
diff --git a/node_modules/readable-stream/node_modules/isarray/build/build.js b/node_modules/readable-stream/node_modules/isarray/build/build.js
new file mode 100644
index 0000000..ec58596
--- /dev/null
+++ b/node_modules/readable-stream/node_modules/isarray/build/build.js
@@ -0,0 +1,209 @@
+
+/**
+ * Require the given path.
+ *
+ * @param {String} path
+ * @return {Object} exports
+ * @api public
+ */
+
+function require(path, parent, orig) {
+ var resolved = require.resolve(path);
+
+ // lookup failed
+ if (null == resolved) {
+ orig = orig || path;
+ parent = parent || 'root';
+ var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
+ err.path = orig;
+ err.parent = parent;
+ err.require = true;
+ throw err;
+ }
+
+ var module = require.modules[resolved];
+
+ // perform real require()
+ // by invoking the module's
+ // registered function
+ if (!module.exports) {
+ module.exports = {};
+ module.client = module.component = true;
+ module.call(this, module.exports, require.relative(resolved), module);
+ }
+
+ return module.exports;
+}
+
+/**
+ * Registered modules.
+ */
+
+require.modules = {};
+
+/**
+ * Registered aliases.
+ */
+
+require.aliases = {};
+
+/**
+ * Resolve `path`.
+ *
+ * Lookup:
+ *
+ * - PATH/index.js
+ * - PATH.js
+ * - PATH
+ *
+ * @param {String} path
+ * @return {String} path or null
+ * @api private
+ */
+
+require.resolve = function(path) {
+ if (path.charAt(0) === '/') path = path.slice(1);
+ var index = path + '/index.js';
+
+ var paths = [
+ path,
+ path + '.js',
+ path + '.json',
+ path + '/index.js',
+ path + '/index.json'
+ ];
+
+ for (var i = 0; i < paths.length; i++) {
+ var path = paths[i];
+ if (require.modules.hasOwnProperty(path)) return path;
+ }
+
+ if (require.aliases.hasOwnProperty(index)) {
+ return require.aliases[index];
+ }
+};
+
+/**
+ * Normalize `path` relative to the current path.
+ *
+ * @param {String} curr
+ * @param {String} path
+ * @return {String}
+ * @api private
+ */
+
+require.normalize = function(curr, path) {
+ var segs = [];
+
+ if ('.' != path.charAt(0)) return path;
+
+ curr = curr.split('/');
+ path = path.split('/');
+
+ for (var i = 0; i < path.length; ++i) {
+ if ('..' == path[i]) {
+ curr.pop();
+ } else if ('.' != path[i] && '' != path[i]) {
+ segs.push(path[i]);
+ }
+ }
+
+ return curr.concat(segs).join('/');
+};
+
+/**
+ * Register module at `path` with callback `definition`.
+ *
+ * @param {String} path
+ * @param {Function} definition
+ * @api private
+ */
+
+require.register = function(path, definition) {
+ require.modules[path] = definition;
+};
+
+/**
+ * Alias a module definition.
+ *
+ * @param {String} from
+ * @param {String} to
+ * @api private
+ */
+
+require.alias = function(from, to) {
+ if (!require.modules.hasOwnProperty(from)) {
+ throw new Error('Failed to alias "' + from + '", it does not exist');
+ }
+ require.aliases[to] = from;
+};
+
+/**
+ * Return a require function relative to the `parent` path.
+ *
+ * @param {String} parent
+ * @return {Function}
+ * @api private
+ */
+
+require.relative = function(parent) {
+ var p = require.normalize(parent, '..');
+
+ /**
+ * lastIndexOf helper.
+ */
+
+ function lastIndexOf(arr, obj) {
+ var i = arr.length;
+ while (i--) {
+ if (arr[i] === obj) return i;
+ }
+ return -1;
+ }
+
+ /**
+ * The relative require() itself.
+ */
+
+ function localRequire(path) {
+ var resolved = localRequire.resolve(path);
+ return require(resolved, parent, path);
+ }
+
+ /**
+ * Resolve relative to the parent.
+ */
+
+ localRequire.resolve = function(path) {
+ var c = path.charAt(0);
+ if ('/' == c) return path.slice(1);
+ if ('.' == c) return require.normalize(p, path);
+
+ // resolve deps by returning
+ // the dep in the nearest "deps"
+ // directory
+ var segs = parent.split('/');
+ var i = lastIndexOf(segs, 'deps') + 1;
+ if (!i) i = 0;
+ path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
+ return path;
+ };
+
+ /**
+ * Check if module is defined at `path`.
+ */
+
+ localRequire.exists = function(path) {
+ return require.modules.hasOwnProperty(localRequire.resolve(path));
+ };
+
+ return localRequire;
+};
+require.register("isarray/index.js", function(exports, require, module){
+module.exports = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
+
+});
+require.alias("isarray/index.js", "isarray/index.js");
+
diff --git a/node_modules/readable-stream/node_modules/isarray/component.json b/node_modules/readable-stream/node_modules/isarray/component.json
new file mode 100644
index 0000000..9e31b68
--- /dev/null
+++ b/node_modules/readable-stream/node_modules/isarray/component.json
@@ -0,0 +1,19 @@
+{
+ "name" : "isarray",
+ "description" : "Array#isArray for older browsers",
+ "version" : "0.0.1",
+ "repository" : "juliangruber/isarray",
+ "homepage": "https://github.com/juliangruber/isarray",
+ "main" : "index.js",
+ "scripts" : [
+ "index.js"
+ ],
+ "dependencies" : {},
+ "keywords": ["browser","isarray","array"],
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/readable-stream/node_modules/isarray/index.js b/node_modules/readable-stream/node_modules/isarray/index.js
new file mode 100644
index 0000000..5f5ad45
--- /dev/null
+++ b/node_modules/readable-stream/node_modules/isarray/index.js
@@ -0,0 +1,3 @@
+module.exports = Array.isArray || function (arr) {
+ return Object.prototype.toString.call(arr) == '[object Array]';
+};
diff --git a/node_modules/readable-stream/node_modules/isarray/package.json b/node_modules/readable-stream/node_modules/isarray/package.json
new file mode 100644
index 0000000..6abca52
--- /dev/null
+++ b/node_modules/readable-stream/node_modules/isarray/package.json
@@ -0,0 +1,86 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "isarray@0.0.1",
+ "scope": null,
+ "escapedName": "isarray",
+ "name": "isarray",
+ "rawSpec": "0.0.1",
+ "spec": "0.0.1",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/readable-stream"
+ ]
+ ],
+ "_from": "isarray@0.0.1",
+ "_id": "isarray@0.0.1",
+ "_inCache": true,
+ "_location": "/readable-stream/isarray",
+ "_npmUser": {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ },
+ "_npmVersion": "1.2.18",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "isarray@0.0.1",
+ "scope": null,
+ "escapedName": "isarray",
+ "name": "isarray",
+ "rawSpec": "0.0.1",
+ "spec": "0.0.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/readable-stream"
+ ],
+ "_resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "_shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
+ "_shrinkwrap": null,
+ "_spec": "isarray@0.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/readable-stream",
+ "author": {
+ "name": "Julian Gruber",
+ "email": "mail@juliangruber.com",
+ "url": "http://juliangruber.com"
+ },
+ "bugs": {
+ "url": "https://github.com/juliangruber/isarray/issues"
+ },
+ "dependencies": {},
+ "description": "Array#isArray for older browsers",
+ "devDependencies": {
+ "tap": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "8a18acfca9a8f4177e09abfc6038939b05d1eedf",
+ "tarball": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+ },
+ "homepage": "https://github.com/juliangruber/isarray",
+ "keywords": [
+ "browser",
+ "isarray",
+ "array"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "juliangruber",
+ "email": "julian@juliangruber.com"
+ }
+ ],
+ "name": "isarray",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/juliangruber/isarray.git"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "version": "0.0.1"
+}
diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json
new file mode 100644
index 0000000..582e9b9
--- /dev/null
+++ b/node_modules/readable-stream/package.json
@@ -0,0 +1,112 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "readable-stream@~1.1.9",
+ "scope": null,
+ "escapedName": "readable-stream",
+ "name": "readable-stream",
+ "rawSpec": "~1.1.9",
+ "spec": ">=1.1.9 <1.2.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/duplexer2"
+ ]
+ ],
+ "_from": "readable-stream@>=1.1.9 <1.2.0",
+ "_id": "readable-stream@1.1.14",
+ "_inCache": true,
+ "_location": "/readable-stream",
+ "_nodeVersion": "5.10.1",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/readable-stream-1.1.14.tgz_1460563293219_0.5682175166439265"
+ },
+ "_npmUser": {
+ "name": "cwmma",
+ "email": "calvin.metcalf@gmail.com"
+ },
+ "_npmVersion": "3.8.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "readable-stream@~1.1.9",
+ "scope": null,
+ "escapedName": "readable-stream",
+ "name": "readable-stream",
+ "rawSpec": "~1.1.9",
+ "spec": ">=1.1.9 <1.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/duplexer2"
+ ],
+ "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "_shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9",
+ "_shrinkwrap": null,
+ "_spec": "readable-stream@~1.1.9",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/duplexer2",
+ "author": {
+ "name": "Isaac Z. Schlueter",
+ "email": "i@izs.me",
+ "url": "http://blog.izs.me/"
+ },
+ "browser": {
+ "util": false
+ },
+ "bugs": {
+ "url": "https://github.com/isaacs/readable-stream/issues"
+ },
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ },
+ "description": "Streams3, a user-land copy of the stream library from Node.js v0.11.x",
+ "devDependencies": {
+ "tap": "~0.2.6"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "7cf4c54ef648e3813084c636dd2079e166c081d9",
+ "tarball": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
+ },
+ "gitHead": "52550840cb1d6e8a98ef9a909a4bea360bc6f7da",
+ "homepage": "https://github.com/isaacs/readable-stream#readme",
+ "keywords": [
+ "readable",
+ "stream",
+ "pipe"
+ ],
+ "license": "MIT",
+ "main": "readable.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ {
+ "name": "tootallnate",
+ "email": "nathan@tootallnate.net"
+ },
+ {
+ "name": "rvagg",
+ "email": "rod@vagg.org"
+ },
+ {
+ "name": "cwmma",
+ "email": "calvin.metcalf@gmail.com"
+ }
+ ],
+ "name": "readable-stream",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/readable-stream.git"
+ },
+ "scripts": {
+ "test": "tap test/simple/*.js"
+ },
+ "version": "1.1.14"
+}
diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js
new file mode 100644
index 0000000..27e8d8a
--- /dev/null
+++ b/node_modules/readable-stream/passthrough.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_passthrough.js")
diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js
new file mode 100644
index 0000000..2a8b5c6
--- /dev/null
+++ b/node_modules/readable-stream/readable.js
@@ -0,0 +1,10 @@
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = require('stream');
+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');
+if (!process.browser && process.env.READABLE_STREAM === 'disable') {
+ module.exports = require('stream');
+}
diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js
new file mode 100644
index 0000000..5d482f0
--- /dev/null
+++ b/node_modules/readable-stream/transform.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_transform.js")
diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js
new file mode 100644
index 0000000..e1e9efd
--- /dev/null
+++ b/node_modules/readable-stream/writable.js
@@ -0,0 +1 @@
+module.exports = require("./lib/_stream_writable.js")
diff --git a/node_modules/rechoir/.npmignore b/node_modules/rechoir/.npmignore
new file mode 100644
index 0000000..9daeafb
--- /dev/null
+++ b/node_modules/rechoir/.npmignore
@@ -0,0 +1 @@
+test
diff --git a/node_modules/rechoir/.travis.yml b/node_modules/rechoir/.travis.yml
new file mode 100644
index 0000000..57e9fda
--- /dev/null
+++ b/node_modules/rechoir/.travis.yml
@@ -0,0 +1,24 @@
+sudo: false
+language: node_js
+node_js:
+ - "0.10"
+ - "0.12"
+env:
+ global:
+ - REMOVE_DEPS=""
+ matrix:
+ - "CUSTOM_DEPS=coffee-script@~1.3"
+ - "CUSTOM_DEPS=coffee-script@~1.5"
+ - "CUSTOM_DEPS=coffee-script@~1.7"
+ - "CUSTOM_DEPS=coffee-script@latest"
+ - "CUSTOM_DEPS=iced-coffee-script@1.6.3-j"
+ - "CUSTOM_DEPS=iced-coffee-script@latest"
+ - "CUSTOM_DEPS=LiveScript@1.3.1 REMOVE_DEPS=livescript"
+ - "CUSTOM_DEPS=typescript-require REMOVE_DEPS=typescript-register"
+matrix:
+ fast_finish: true
+before_install:
+ - "npm install -g npm" # needs the newest version of npm
+before_script:
+ - "[ \"${REMOVE_DEPS}\" == \"\" ] || npm rm $REMOVE_DEPS"
+ - "npm install $CUSTOM_DEPS" # install a specific version of dependencies
diff --git a/node_modules/rechoir/CHANGELOG b/node_modules/rechoir/CHANGELOG
new file mode 100644
index 0000000..e10327b
--- /dev/null
+++ b/node_modules/rechoir/CHANGELOG
@@ -0,0 +1,38 @@
+v0.6.2:
+ date: 2015-07-22
+ changes:
+ - Return `undefined` when an unknown extension is provided to prepare and
+ the `nothrow` option is specified.
+v0.6.1:
+ date: 2015-05-22
+ changes:
+ - Add option for not throwing.
+v0.6.0:
+ date: 2015-05-20
+ changes:
+ - Include module name when prepare is successful.
+v0.5.0:
+ date: 2015-05-20
+ changes:
+ - Overhaul to support interpret 0.6.0.
+v0.3.0:
+ date: 2015-01-10
+ changes:
+ - Breaking: `load` method removed.
+ - Improved extension recognition.
+ - No longer fails upon dots in filenames.
+ - Support confuration objects.
+ - Support and test ES6.
+ - Support legacy module loading.
+v0.2.2:
+ date: 2014-12-17
+ changes:
+ - Expose interpret.
+v0.2.0:
+ date: 2014-04-20
+ changes:
+ - Simplify loading of coffee-script and iced-coffee-script.
+v0.1.0:
+ date: 2014-04-20
+ changes:
+ - Initial public release.
diff --git a/node_modules/rechoir/LICENSE b/node_modules/rechoir/LICENSE
new file mode 100644
index 0000000..f467993
--- /dev/null
+++ b/node_modules/rechoir/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2015 Tyler Kellen
+
+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/node_modules/rechoir/README.md b/node_modules/rechoir/README.md
new file mode 100644
index 0000000..32280c0
--- /dev/null
+++ b/node_modules/rechoir/README.md
@@ -0,0 +1,42 @@
+# rechoir [](http://travis-ci.org/tkellen/js-rechoir)
+> Require any supported file as a node module.
+
+[](https://nodei.co/npm/rechoir/)
+
+## What is it?
+This module, in conjunction with [interpret]-like objects can register any file type the npm ecosystem has a module loader for. This library is a dependency of [Liftoff].
+
+## API
+
+### prepare(config, filepath, requireFrom)
+Look for a module loader associated with the provided file and attempt require it. If necessary, run any setup required to inject it into [require.extensions](http://nodejs.org/api/globals.html#globals_require_extensions).
+
+`config` An [interpret]-like configuration object.
+
+`filepath` A file whose type you'd like to register a module loader for.
+
+`requireFrom` An optional path to start searching for the module required to load the requested file. Defaults to the directory of `filepath`.
+
+If calling this method is successful (aka: it doesn't throw), you can now require files of the type you requested natively.
+
+An error with a `failures` property will be thrown if the module loader(s) configured for a given extension cannot be registered.
+
+If a loader is already registered, this will simply return `true`.
+
+**Note:** While rechoir will automatically load and register transpilers like `coffee-script`, you must provide a local installation. The transpilers are **not** bundled with this module.
+
+#### Usage
+```js
+const config = require('interpret').extensions;
+const rechoir = require('rechoir');
+rechoir.prepare(config, './test/fixtures/test.coffee');
+rechoir.prepare(config, './test/fixtures/test.csv');
+rechoir.prepare(config, './test/fixtures/test.toml');
+
+console.log(require('./test/fixtures/test.coffee'));
+console.log(require('./test/fixtures/test.csv'));
+console.log(require('./test/fixtures/test.toml'));
+```
+
+[interpret]: http://github.com/tkellen/js-interpret
+[Liftoff]: http://github.com/tkellen/js-liftoff
diff --git a/node_modules/rechoir/index.js b/node_modules/rechoir/index.js
new file mode 100644
index 0000000..0c36d05
--- /dev/null
+++ b/node_modules/rechoir/index.js
@@ -0,0 +1,59 @@
+const path = require('path');
+
+const extension = require('./lib/extension');
+const normalize = require('./lib/normalize');
+const register = require('./lib/register');
+
+exports.prepare = function (extensions, filepath, cwd, nothrow) {
+ var option, attempt;
+ var attempts = [];
+ var err;
+ var onlyErrors = false;
+ var ext = extension(filepath);
+ if (Object.keys(require.extensions).indexOf(ext) !== -1) {
+ return true;
+ }
+ var config = normalize(extensions[ext]);
+ if (!config) {
+ if (nothrow) {
+ return;
+ } else {
+ throw new Error('No module loader found for "'+ext+'".');
+ }
+ }
+ if (!cwd) {
+ cwd = path.dirname(path.resolve(filepath));
+ }
+ if (!Array.isArray(config)) {
+ config = [config];
+ }
+ for (var i in config) {
+ option = config[i];
+ attempt = register(cwd, option.module, option.register);
+ error = (attempt instanceof Error) ? attempt : null;
+ if (error) {
+ attempt = null;
+ }
+ attempts.push({
+ moduleName: option.module,
+ module: attempt,
+ error: error
+ });
+ if (!error) {
+ onlyErrors = false;
+ break;
+ } else {
+ onlyErrors = true;
+ }
+ }
+ if (onlyErrors) {
+ err = new Error('Unable to use specified module loaders for "'+ext+'".');
+ err.failures = attempts;
+ if (nothrow) {
+ return err;
+ } else {
+ throw err;
+ }
+ }
+ return attempts;
+};
diff --git a/node_modules/rechoir/lib/extension.js b/node_modules/rechoir/lib/extension.js
new file mode 100644
index 0000000..60f19da
--- /dev/null
+++ b/node_modules/rechoir/lib/extension.js
@@ -0,0 +1,11 @@
+const path = require('path');
+
+const EXTRE = /^[.]?[^.]+([.].*)$/;
+
+module.exports = function (input) {
+ var extension = EXTRE.exec(path.basename(input));
+ if (!extension) {
+ return;
+ }
+ return extension[1];
+};
diff --git a/node_modules/rechoir/lib/normalize.js b/node_modules/rechoir/lib/normalize.js
new file mode 100644
index 0000000..0da5e58
--- /dev/null
+++ b/node_modules/rechoir/lib/normalize.js
@@ -0,0 +1,15 @@
+function normalizer (config) {
+ if (typeof config === 'string') {
+ return {
+ module: config
+ }
+ }
+ return config;
+};
+
+module.exports = function (config) {
+ if (Array.isArray(config)) {
+ return config.map(normalizer);
+ }
+ return normalizer(config);
+};
diff --git a/node_modules/rechoir/lib/register.js b/node_modules/rechoir/lib/register.js
new file mode 100644
index 0000000..20e8ca7
--- /dev/null
+++ b/node_modules/rechoir/lib/register.js
@@ -0,0 +1,15 @@
+const path = require('path');
+const resolve = require('resolve');
+
+module.exports = function (cwd, moduleName, register) {
+ try {
+ var modulePath = resolve.sync(moduleName, {basedir: cwd});
+ var result = require(modulePath);
+ if (typeof register === 'function') {
+ register(result);
+ }
+ } catch (e) {
+ result = e;
+ }
+ return result;
+};
diff --git a/node_modules/rechoir/package.json b/node_modules/rechoir/package.json
new file mode 100644
index 0000000..2139b62
--- /dev/null
+++ b/node_modules/rechoir/package.json
@@ -0,0 +1,148 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "rechoir@^0.6.2",
+ "scope": null,
+ "escapedName": "rechoir",
+ "name": "rechoir",
+ "rawSpec": "^0.6.2",
+ "spec": ">=0.6.2 <0.7.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff"
+ ]
+ ],
+ "_from": "rechoir@>=0.6.2 <0.7.0",
+ "_id": "rechoir@0.6.2",
+ "_inCache": true,
+ "_location": "/rechoir",
+ "_nodeVersion": "0.12.4",
+ "_npmUser": {
+ "name": "tkellen",
+ "email": "tyler@sleekcode.net"
+ },
+ "_npmVersion": "2.7.4",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "rechoir@^0.6.2",
+ "scope": null,
+ "escapedName": "rechoir",
+ "name": "rechoir",
+ "rawSpec": "^0.6.2",
+ "spec": ">=0.6.2 <0.7.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/liftoff"
+ ],
+ "_resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "_shasum": "85204b54dba82d5742e28c96756ef43af50e3384",
+ "_shrinkwrap": null,
+ "_spec": "rechoir@^0.6.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/liftoff",
+ "author": {
+ "name": "Tyler Kellen",
+ "url": "http://goingslowly.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/tkellen/node-rechoir/issues"
+ },
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "description": "Require any supported file as a node module.",
+ "devDependencies": {
+ "babel": "^5.4.3",
+ "chai": "^2.3.0",
+ "coco": "^0.9.1",
+ "coffee-script": "^1.9.2",
+ "earlgrey": "0.0.9",
+ "iced-coffee-script": "^1.8.0-d",
+ "interpret": "^0.6.1",
+ "json5": "^0.4.0",
+ "livescript": "^1.4.0",
+ "mocha": "^2.2.5",
+ "node-jsx": "^0.13.3",
+ "require-csv": "0.0.1",
+ "require-ini": "0.0.1",
+ "require-uncached": "^1.0.2",
+ "require-xml": "0.0.1",
+ "require-yaml": "0.0.1",
+ "rimraf": "^2.3.4",
+ "semver": "^4.3.4",
+ "sinon": "^1.14.1",
+ "toml-require": "^1.0.1",
+ "typescript-register": "^1.1.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "85204b54dba82d5742e28c96756ef43af50e3384",
+ "tarball": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "gitHead": "1aafd85aac487171be71891b916c9136c620ac0e",
+ "homepage": "https://github.com/tkellen/node-rechoir",
+ "keywords": [
+ "require",
+ "cjsx",
+ "co",
+ "coco",
+ "coffee-script",
+ "coffee",
+ "coffee.md",
+ "csv",
+ "earlgrey",
+ "es",
+ "es6",
+ "iced",
+ "iced.md",
+ "iced-coffee-script",
+ "ini",
+ "js",
+ "json",
+ "json5",
+ "jsx",
+ "react",
+ "litcoffee",
+ "liticed",
+ "ls",
+ "livescript",
+ "toml",
+ "ts",
+ "typescript",
+ "xml",
+ "yaml",
+ "yml"
+ ],
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/tkellen/node-rechoir/blob/master/LICENSE"
+ }
+ ],
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "tkellen",
+ "email": "tyler@sleekcode.net"
+ },
+ {
+ "name": "phated",
+ "email": "blaine@iceddev.com"
+ }
+ ],
+ "name": "rechoir",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/tkellen/node-rechoir.git"
+ },
+ "scripts": {
+ "test": "mocha -R spec test/index.js"
+ },
+ "version": "0.6.2"
+}
diff --git a/node_modules/redefine/.gitattributes b/node_modules/redefine/.gitattributes
new file mode 100644
index 0000000..2125666
--- /dev/null
+++ b/node_modules/redefine/.gitattributes
@@ -0,0 +1 @@
+* text=auto
\ No newline at end of file
diff --git a/node_modules/redefine/.npmignore b/node_modules/redefine/.npmignore
new file mode 100644
index 0000000..11482a9
--- /dev/null
+++ b/node_modules/redefine/.npmignore
@@ -0,0 +1,6 @@
+src/*
+test/*
+template/*
+build/*.amd.js
+Makefile
+index.html
\ No newline at end of file
diff --git a/node_modules/redefine/.travis.yml b/node_modules/redefine/.travis.yml
new file mode 100644
index 0000000..b6c89b3
--- /dev/null
+++ b/node_modules/redefine/.travis.yml
@@ -0,0 +1,9 @@
+language: node_js
+node_js:
+ - 0.8
+ - 0.9
+git:
+ depth: 1
+branches:
+ only:
+ - master
\ No newline at end of file
diff --git a/node_modules/redefine/HOWTO.md b/node_modules/redefine/HOWTO.md
new file mode 100644
index 0000000..86ad2b5
--- /dev/null
+++ b/node_modules/redefine/HOWTO.md
@@ -0,0 +1,307 @@
+redefine VS ES5
+===============
+
+#### Create A Null Object
+
+ // redefine
+ var o = redefine.from(null);
+
+ // ES5
+ var o = Object.create(null);
+
+#### Add Properties During Creation
+
+ // redefine
+ var o = redefine.from(null, {
+ name: "object",
+ toString: function () {
+ return "Hi, I am " + this.name;
+ }
+ });
+
+ // ES5
+ var o = Object.create(null, {
+ name: {
+ value: "object"
+ },
+ toString: {
+ value: function () {
+ return "Hi, I am " + this.name;
+ }
+ }
+ });
+
+#### Add Configurable + Writable Properties During Creation
+
+ // redefine
+ var o = redefine.from(null, {
+ name: "object",
+ toString: function () {
+ return "Hi, I am " + this.name;
+ }
+ }, {
+ configurable : true,
+ writable: true
+ });
+
+ // ES5
+ var o = Object.create(null, {
+ name: {
+ configurable: true,
+ writable: true,
+ value: "object"
+ },
+ toString: {
+ configurable: true,
+ writable: true,
+ value: function () {
+ return "Hi, I am " + this.name;
+ }
+ }
+ });
+
+#### Add A Getter/Setter
+
+ // redefine
+ var o = redefine.from({}, {
+ bday: Date.now(),
+ age: redefine.as({
+ set: function () {
+ throw 'you cannot set your age';
+ },
+ get: function () {
+ return parseInt(
+ (Date.now() - this.bday) /
+ (1000 * 60 * 60 * 24 * 365)
+ ); // I know, no leap year
+ }
+ })
+ });
+
+ // ES5
+ var o = Object.create({}, {
+ bday: {
+ value: Date.now()
+ },
+ age: {
+ set: function () {
+ throw 'you cannot set your age';
+ },
+ get: function () {
+ return parseInt(
+ (Date.now() - this.bday) /
+ (1000 * 60 * 60 * 24 * 365)
+ ); // I know, no leap year
+ }
+ }
+ });
+
+#### Real World Example: An Emitter Class
+This a simplified `Emitter` class with a logic optimized to save some memory and GC cycle.
+
+ // generic basic Emitter constructor
+ function Emitter(){}
+ function emit(callback) {
+ // just a recycled function
+ callback(this);
+ }
+
+This is how we can define the prototype of the `Emitter` class.
+
+ // redefine
+ redefine(
+ Emitter.prototype,
+ {
+ emit: function (type, data) {
+ if (type in this._handlers) {
+ this._handlers[type].forEach(emit, data);
+ }
+ return this;
+ },
+ on: function (type, handler) {
+ var list = this._getList(type);
+ list.indexOf(handler) < 0 && list.push(handler);
+ return this;
+ },
+ off: function (type, handler) {
+ var list = this._getList(type),
+ i = list.indexOf(handler);
+ if (-1 < i) {
+ list.splice(i, 1);
+ if (!list.length) {
+ delete this._handlers[type];
+ if (!Object.keys(this._handler).length) {
+ delete this._handlers;
+ }
+ }
+ }
+ return this;
+ },
+ _getList: function (type) {
+ return this._handlers[type] || (
+ this._handlers[type] = []
+ );
+ },
+ _handlers: redefine.later(function(){
+ return {};
+ })
+ }
+ );
+
+The pattern used for the `_handlers` property only is an inherited getter replaced on demand with a direct property access, explained in details in [The Power Of Getters](http://webreflection.blogspot.com/2013/01/the-power-of-getters.html) post.
+
+Long story short: we can create 100 instances of `Emitter` and the amount of extra objects will be exactly `100` instead of `200` considering a handler created during initialization.
+
+With this pattern, only when the `_handlers` object is needed is created once per instance and set as property to avoid calling the getter per each access.
+When listeners are removed, both Array used as type list and `_handlers` are removed, if empty. In order to obtain the same behavior in ES5:
+
+ // ES5
+ Object.defineProperties(
+ Emitter.prototype,
+ {
+ emit: {
+ value: function (type, data) {
+ if (type in this._handlers) {
+ this._handlers[type].forEach(emit, data);
+ }
+ return this;
+ }
+ },
+ on: {
+ value: function (type, handler) {
+ var list = this._getList(type);
+ list.indexOf(handler) < 0 && list.push(handler);
+ return this;
+ },
+ }
+ off: {
+ value: function (type, handler) {
+ var list = this._getList(type),
+ i = list.indexOf(handler);
+ if (-1 < i) {
+ list.splice(i, 1);
+ if (!list.length) {
+ delete this._handlers[type];
+ if (!Object.keys(this._handler).length) {
+ delete this._handlers;
+ }
+ }
+ }
+ return this;
+ }
+ },
+ _getList: {
+ value: function (type) {
+ return this._handlers[type] || (
+ this._handlers[type] = []
+ );
+ }
+ },
+ _handlers: {
+ get: function () {
+ Object.defineProperty(
+ this, "_handlers", {
+ configurable: true,
+ value: {}
+ }
+ );
+ return this._handlers;
+ }
+ }
+ }
+ );
+
+#### Real World Example: A Safer Definition
+While `Object.defineProperties(object, descriptorsList)` second argument loops only through `hasOwnProperty(key)`, once it comes to property definition, and the same is for `Object.defineProperty(obj, key, descriptor)`, the object used to described the property looks up for inherited properties too and consider them.
+
+Even if defaults are `{writable: false, enumerable: false, configurable: false}`, it's easy to make every property `enumerable` and `configurable` simply doing this:
+
+ Object.prototype.configurable = true;
+ Object.prototype.enumerable = true;
+
+After above malicious piece of code, if you think a constant variable defined like this cannot be changed you are wrong:
+
+ Object.defineProperty(window, "myLibrary", {value:myLibrary});
+
+It is necessary indeed to ensure that defaults are written as well, making defaults meaningless because of inheritance, but even worse, if a malicious code will write `Object.prototype.writable = true` and there are getters or setters involved, these will all throw an exception because `writable` does not accept getters or setters.
+
+##### How To Prevent Problems in ES5
+In ES5 every descriptor should inherit from `null` otherwise no descriptor will be immune from possible attacks.
+
+Here an example of few problems we might want to avoid:
+
+ // set up the nasty environment
+ Object.prototype.configurable =
+ Object.prototype.enumerable =
+ Object.prototype.writable = true;
+
+ // verify that there are actually problems
+ try {
+ Object.defineProperty(this, "problem", {get: function () {
+ return "we gonna have bad time";
+ }});
+ } catch(o_O) {
+ console.log("ouch!");
+ Object.defineProperty(this, "problem", {value:true});
+ console.log(this.propertyIsEnumerable("problem")); // true
+ this.problem = {}; // no problems
+ delete this.problem; // true again
+ }
+
+Accordingly, every single descriptor should be created via `Object.crete(null)` so our code should look like
+
+ function descriptor(object) {
+ // now don't take this wrong
+ // but this function is almost
+ // as big as the whole redefine.js library
+ // I would not go through this pattern
+ for (var
+ nullDescriptor = Object.create(null),
+ properties = [
+ "configurable",
+ "enumerable",
+ "writable",
+ "get",
+ "set",
+ "value"
+ ],
+ i = properties.length; i--;
+ object.hasOwnProperty(properties[i]) && (
+ nullDescriptor[properties[i]] = object[properties[i]]
+ )
+ );
+ return nullDescriptor;
+ }
+
+ Object.defineProperty(this, "problem", descriptor({
+ value: "now we talk"
+ }));
+
+ this.propertyIsEnumerable("problem"); // false
+ this.problem = {}; // nope
+ delete this.problem; // false
+ this.problem; // "now we talk"
+
+Got it? Now ...
+
+##### How To Prevent Problems in redefine.js
+
+ redefine(this, "problem", "solved");
+
+ this.propertyIsEnumerable("problem"); // false
+ this.problem = {}; // nope
+ delete this.problem; // false
+ this.problem; // "solved"
+
+If you are wondering about **performance** there are many things to consider behind `redefine.js` and one of these is that performance are really good for what it offers.
+
+While is usually slightly slower on desktop, `redefine.js` is [almost as fast in older Android 2.3 devices](http://jsperf.com/redefine-js) where performance matters the most.
+
+`redefine.js` is indeed suitable for mobile phones, even if quite old!
+
+
+
+
+
+
+
diff --git a/node_modules/redefine/LICENSE.txt b/node_modules/redefine/LICENSE.txt
new file mode 100644
index 0000000..fcb09a4
--- /dev/null
+++ b/node_modules/redefine/LICENSE.txt
@@ -0,0 +1,19 @@
+Copyright (C) 2011 by Andrea Giammarchi, @WebReflection
+
+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/node_modules/redefine/README.md b/node_modules/redefine/README.md
new file mode 100644
index 0000000..9668faa
--- /dev/null
+++ b/node_modules/redefine/README.md
@@ -0,0 +1,491 @@
+redefine.js
+===========
+a lightweight yet powerful ES5 utility.
+
+[](http://travis-ci.org/WebReflection/redefine)
+
+## Obsolete
+The most updated, future proof, actively maintained, and widely compatible way to define classes is [es-class](https://github.com/WebReflection/es-class#es-class).
+
+If you are here to enrich prototypes, please have a look at `es-class`, it will most likely provide everything you need and much more.
+
+If you are here to be able to lazily assign properties to a generic object or prototype, please check [lazyval](https://github.com/WebReflection/lazyval#lazyval).
+
+
+
+### About Redefine JS
+This ~1.5KB (minified and gzipped) framework brings the power of ES5 and ES6 features in node.js and all modern mobile or desktop browsers.
+
+Main features:
+
+ * **ES6** like **classes** definition with extra power via `mixin` and `bound` magic
+ * **ES5** **properties** definition without descriptors paranoia and prolix syntax
+ * **ES3** **friendly** and mostly compatible
+
+All common tasks to organize your objects access, definition, and inheritance, can be achieved via `redefine.js` goodness.
+
+### Classes
+One thing really frequent in JS world, one thing not so easy to get right if not familiar with ES5: the JavaScript **Class** concept from other OOP languages.
+
+Well, with tests included on top of all features, `redefine.Class(definition)` now offers a semantic utility to safely create classes in JavaScript.
+
+```JavaScript
+var Lib = redefine.Class({
+
+ extend: SuperLib, // inheritance
+
+ mixin: oneOrMoreObject, // mixin
+ Constructor
+
+ statics: { // statics
+ someMethod: function () {},
+ someProperty: 0
+ },
+ // common definition
+ method1: function () {},
+ property1: null
+
+ // constructor
+ constructor: function Lib() {
+ //implicit initialization
+ // never invoked if extended via other classes
+ }
+});
+```
+All properties tested and fully covered, included the very special case where you want to use `this.super(argN)` in inherited methods or constructor. No performance impact if you don't use it, not a single problem if you are under strict code and don't want to allow `callback.caller` access, you use what you want/need when you want/need, how easy is that? Enjoy! (now back to the problem ...)
+
+
+### The Problem
+ES5 verbosity is not just annoying, is also *spaghetti prone*. The inability to group few descriptors together for one or more properties is inefficient too because of the amount of garbage we create at runtime to define all properties we need.
+
+```javascript
+// classic ES5 syntax
+Object.defineProperties(
+ SomeClass.prototype,
+ {
+ method: {
+ value: function () {
+ // the method
+ }
+ },
+ property: {
+ enumerable: true,
+ value: "the property"
+ }
+ }
+);
+```
+
+To define one method and one property we have used 3 extra objects: the properties wrapper, and each property descriptor. In case we were planning to make a list of properties all enumerable, as well as we could decide for writable or configurable, we would have repeated that pattern all over, resulting in a giant piece of JavaScript that will look like `enumerable:true` and nothing else. We also have some difficulty to understand what is each property about because the way we are familiar with is this one:
+
+```javascript
+// the familiar JS approach
+SomeClass.prototype = {
+ method: function () {
+ // the method
+ },
+ property: "the property"
+};
+```
+
+Above snippet is not just more elegant and clean, is also better at runtime and much easier to read. In ES5, as example, when we see a function is not necessarily because that is a method, it might be a getter or setter too so we have to pay a lot of attention when we look at the code.
+
+### The Solution
+So why cannot we have the best from both worlds? An easy to read and naturally understand syntax with the ability to switch ES5 power *on or off on demand*?
+
+```javascript
+// redefine.js
+redefine(
+ SomeClass.prototype, {
+ method: function () {
+ // the method
+ },
+ property: "the property"
+});
+```
+
+The best part about `redefine.js` is its **ambiguity free** approach, granted by hidden classes understood at definition time, a technique that lets us switch `power on` when and if needed. As example, the very first `Object.definePropeties` snippet is not just setting properties, is also defining one of them as `enumerable`.
+
+```javascript
+// identical to initial snippet
+redefine(
+ SomeClass.prototype, {
+ method: function () {
+ // the method
+ },
+ property: redefine.as({
+ enumerable: true,
+ value: "the property"
+ })
+});
+```
+
+The powerful simplified API lets us define **defaults** too, so imagine we want that all properties should be `configurable`, `enumerable`, and `writable` because we expect exactly same *ES3* behavior. This is what you would be forced to do in ES5:
+
+```javascript
+// ES5 has no defaults
+Object.defineProperties(
+ SomeClass.prototype,
+ {
+ method: {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: function () {
+ // the method
+ }
+ },
+ property: {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: "the property"
+ }
+ }
+);
+```
+
+It's kinda hard to tell anymore what is that code about, don't you agree? Now let's compare against `redefine()`
+
+```javascript
+// redefine.js
+redefine(
+ SomeClass.prototype,
+ {
+ method: function () {
+ // the method
+ },
+ property: "the property"
+ },
+
+ // optional 3rd argument for defaults
+ {
+ configurable: true,
+ enumerable: true,
+ writable: true
+ }
+);
+```
+
+We focus on the definition of our meant behavior, rather than on each descriptor property. If we apply defaults in groups, the code will be much more organized too. Bear in mind that defaults can be overwritten by semantic `redefine.as()` definition.
+
+```javascript
+redefine(
+ object,
+ {
+ prop: as({
+ enumerable: false,
+ value: theValue
+ })
+ },
+ {
+ enumerable: true
+ }
+);
+```
+
+### A Simplified Object.create
+We all have to consider that current descriptors verbosity and concept is ["*trolling*" major ECMAScript experts in the world](https://mail.mozilla.org/pipermail/es-discuss/2012-November/026716.html) too. `Object.create` is not natural for JS developers and it makes things more complex than ever. Same descriptors verbosity applied for what should be the `new function` substitute ... in this sense it was a failure! How about redefining objects from others?
+
+```javascript
+// ES5 Object.create
+var instance = Object.create(
+ sourceObject,
+ {
+ name:
+ {
+ value: "instance"
+ },
+ age:
+ {
+ value: 34
+ },
+ toString:
+ {
+ value: function () {
+ // isn't the `this` ambiguous here ?
+ // I would expect to refer to the toString descriptor
+ return "Hi, I am " + this.name + ", and I am " this.age;
+ }
+ }
+ }
+);
+
+// redefine.js
+var instance = redefine.from(
+ sourceObject,
+ {
+ name: "instance",
+ age: 34,
+ toString: function () {
+ return "Hi, I am " + this.name + ", and I am " this.age;
+ }
+ }
+);
+```
+
+I hope you agree that every time we define a method where `this` is used inside another context, as the descriptor is, looks so confusing!
+The descriptor is just an object and it could be used differently in other pieces of logic so that if invoked a part everything will fail there.
+
+In few words, `redefine.js` can also be **less ambiguous** than ES5!
+
+### Lazy Property Definition Pattern Included
+I have described this pattern in [The Power Of Getters](http://webreflection.blogspot.com/2013/01/the-power-of-getters.html) entry in my blog.
+
+However, these two comments left me with too many thoughts about ES5 and the fact that really is not easy to understand for developers.
+
+> **Adrien Risser** ... Andrea, every post of yours is a brainfuck! Understanding barely most of what you describe, I can't say I see how I would use all of or just a part of it in any project of mine.
+
+or even worst ...
+
+> **jonz** ... Right now this *syntax seems like obfuscation but the patterns it supports are what I've always wanted*, I wonder if it will ever become familiar.
+
+So you are right guys, the way ES5 lets us implement amazing new patterns and possibilities is even hard to understand or imagine. This is why `redefine.js` comes with a pattern many other programming languages can only dream about: the memory efficient and performance oriented **inherited getter replaced on demand with a direct property access**! (BOOM, I know your mind just blown!)
+
+```javascript
+// what you would do today in ES3 classes
+function MyClass() {
+ this.handlersIMightNeed = {};
+ this.propertiesIMightLookFor = [];
+ this.stuffNotSureIfEvenUse = {};
+ this.methodThatShouldBindWhenNeeded =
+ this.method.bind(this);
+}
+```
+
+Above snippet creates 4 extra objects per each instance of `MyClass`. This is a [memory disaster prone approach plus is really slow during instance creation](http://jsperf.com/the-power-of-getters-element) you can easily compare checking the *Element_Getter* results across all browsers and engines. We also force our syntax to be ES3 because if the prototype of MyClass would have been defined via `Object.defineProperties()` and these were not `configurable` or `writable`, this is what we should really do in order to have an equivalent behavior in our code.
+
+```javascript
+// what we should do if MyClass.prototype
+// was defined with these properties as defaults
+function MyClass() {
+ Object.defineProperty(this,
+ "handlersIMightNeed", {value: {}});
+ Object.defineProperty(this,
+ "propertiesIMightLookFor", {value: []});
+ Object.defineProperty(this,
+ "stuffNotSureIfEvenUse", {value: {}});
+ Object.defineProperty(this,
+ "methodThatShouldBindWhenNeeded",
+ {value: this.method.bind(this)});
+}
+```
+
+This ain't going anywhere, and this is why ES5 is keeping developers far away from its goodness. So, how about `redefine.later()` to obtain the desired pattern ?
+
+```javascript
+var later = redefine.later;
+// redefine.js lazy getter replacement
+function MyClass(){
+ // nothing to do here
+ // it cannot be faster!
+}
+redefine(
+ MyClass.prototype,
+ {
+ handlersIMightNeed: later(function(){
+ return {};
+ }),
+ propertiesIMightLookFor: later(function(){
+ return [];
+ }),
+ stuffNotSureIfEvenUse: later(function(){
+ return {};
+ }),
+ methodThatShouldBindWhenNeeded: later(function(){
+ return this.method.bind(this);
+ })
+ }
+);
+```
+
+There, a **zero costs** runtime instance creation where all those properties will be assigned as direct properties, rather than getters, when and only if the instance is using, or better, accessing them. These properties are also all deletable by default, unless specified differently, so that it's easy to reset hard a property and reassign it later on when, and if, needed.
+
+### More Robust Than ES5
+There is a potential hole in ES5 specifications about descriptors, inherited properties are considered too. This is an example of how to destroy any library I know based on ES5:
+
+```javascript
+// malicious code
+Object.prototype.get = function screwed(){
+ // deal with it
+};
+Object.prototype.configurable =
+Object.prototype.enumerable =
+Object.prototype.writable = true;
+
+// your code
+var o = Object.defineProperty({}, "key", {value: "value"});
+```
+
+**TypeError** `Invalid property. 'value' present on property with getter or setter.`
+
+This would never happen in `redefine.js` world.
+
+```javascript
+var o = redefine({}, "key", "value");
+o.key; // "value", all good
+```
+
+Happy coding!
+
+### API
+
+#### redefine(obj, properties)
+This is the main function and the only exported object. It does basically one thing but it has different overloads to do that:
+
+ * `redefine(obj:Object, key:string, value:any[, defaults:Object]):Object`, returns the first argument and define a value straight forward using ES5 defaults unless specified differently.
+This signature has these two kind of overloads
+ * `redefine(obj:Object, key:string, value:As[, defaults:Object]):Object`, returns the first argument and define a property `key` using `redefine.as({descriptor})` as value descriptor. `As` is an internal, private, class that overrides any default, if specified, or inherited behavior.
+ * `redefine(obj:Object, key:string, value:Later[, defaults:Object]):Object`, returns the first argument and define a property `key` as lazily accessed and replaced as direct property that could be deleted at any time in order to reuse the inherited getter. `Later` is an internal, private, class that overrides any default, if specified, or inherited behavior.
+ * `redefine(obj:Object, properties:Object[, defaults:Object])`, returns the first argument, it does exactly what other overloads do in this case looping through own properties in the specified `properties` Object.
+
+#### redefine.from(proto)
+This semantic method is similar to ES5 `Object.create` except descriptors are those accepted by `redefine()` and `defaults` can be used as well.
+
+ * `redefine.from(source:object[, properties:Object[, defaults:Object]]):Object` returns a new instance where `source.isPrototypeOf(returnedObject)`. Please note `null` is possible too and the second argument, optional as optional is the third one, can be used to redefine properties.
+ * `redefine.from(Class:Function[, properties:Object[, defaults:Object]]):Object` returns an `instanceof Class`, using `Class.prototype` as extend.
+
+Here an example:
+
+```javascript
+var son = redefine.from(
+ ClassName, {age: 123}
+);
+son.age; // 123
+son instanceof ClassName; // true
+ClassName.prototype.isPrototypeOf(son); // true
+```
+
+Creating instances from classes is the most common pattern in JS but if it's really needed to extend a function , rather than its prototype, this method is not the best one but it's possible to hack this behavior, if really needed, in an ugly way such `function df(){} df.prototype = Class; var o = redefine.from(df);`. Highly discouraged, user defined instance of functions cannot be even invoked, just saying...
+
+#### redefine.as(descriptor)
+This semantic method returns an `instanceof As` with properties specified in the `descriptor` addressed once at initialization time.
+
+```javascript
+var ES3Like = redefine.as({
+ enumerable: true,
+ configurable: true,
+ writable: true
+});
+
+// later on, reused to define all ES3 classes
+redefine(
+ MyES3Class.prototype,
+ {... all properties here ...},
+ ES3Like // as defaults
+);
+```
+
+#### redefine.later(Object)
+This semantic method returns an `instanceof Later` object which aim is to be recognized later on in order to define a lazy getter replacement with direct property access pattern, an innovative pattern described in [The Power Of Getters](http://webreflection.blogspot.com/2013/01/the-power-of-getters.html) post.
+
+```javascript
+var setAsObjectLaterOn = redefine.later(function (){
+ return {};
+});
+
+// in some class
+redefine(
+ MyEvent.prototype,
+ {
+ handlers: setAsObjectLaterOn
+ }
+);
+
+// so that no property is created runtime
+var me = new MyEvent;
+// but only, and once, when/if needed
+me.handlers.test = listener;
+```
+
+It is possible to use a descriptor in order to overwrite the default configuration for this use case which is `{configurable:true, writable:false, enumerable:false}`. In this case, the `value` should be the callback able to return the lazily defined property.
+
+```javascript
+var setAsObjectLaterOn = redefine.later({
+ writable: true, //we want be able to change it later on
+ enumerable: true, // shows up in for/in loops
+ configurable: false,// once define there's no way to delete it
+ value: function (){
+ return {};
+ }
+});
+```
+
+I see what you are thinking about: "*What? How can those properties have value and writable if we are defining a getter?*" Did I mention this method is called `later()` because is later that the property is define through the inherited getter ? :-)
+
+#### redefine.using(descriptor)
+This is to simplify partial implementations. As example, to use redefine to create enumerable properties:
+
+```javascript
+var enumerable = redefine.using({
+ enumerable: true
+});
+
+// any property we want
+var o = enumerable({}, "test", 123);
+o.propertyIsEnumerable("test"); // true
+o.test; // 123
+````
+
+### Libraries Compatibility
+The `redefine.js` API is compatible with [Underscore](http://underscorejs.org) and [Lo-Dash](http://lodash.com) too as `_.redefine` utility. Bear in mind, **you don't need these libraries** at all, in fact `redefine.js` is completely dependencies free but in order to avoid global scope pollution the `redefine` function is defined into a global `_` object. If this is not present it is created, while if it's already there, is simply enriched.
+
+In *node.js* you can use require
+
+ npm install redefine
+
+```javascript
+var
+ redefine = require('redefine'),
+ // redefine = require('redefine').redefine, works too
+ as = redefine.as,
+ from = redefine.from,
+ later = redefine.later
+;
+```
+
+### Browsers And Engines Compatibility
+It is possible to enhance redefine targets using some partial polyfill of ES5 `Object` methods such `create` or [inherit](https://gist.github.com/4397807) and `defineProperty`. However, this library is targeting all browsers supported by [jQuery 2.0](http://blog.jquery.com/2012/07/01/jquery-1-9-and-2-0-tldr-edition/) so here the list:
+
+ * Internet Explorer 9 and greater
+ * Chrome, and mobile
+ * Firefox, and mobile
+ * Opera, and mobile
+ * Safari, and mobile
+ * Webkit stock browsers for mobile
+ * node.js
+ * Rhino
+
+Other server side engines such **Ringo** should be supported too since these are compatible with ES5 and ES5.1. The best way to know if your device, browser, or server side JS engine is working is to [grab wru](https://github.com/WebReflection/wru) and run those tests :-)
+
+
+### 100% Code Coverage
+You can check examples and all tests to `redefine()`, `redefine.as(descriptr)`, `redefine.later(function value(){})`, or `redefine.from(proto)` in [this redefine.js file](https://github.com/WebReflection/redefine/blob/master/test/redefine.js).
+
+To launch tests in **node.js** simply this:
+
+ npm install wru
+ wru test/redefine.js
+
+To launch tests in any browser simply do `open test.html` in OSX or just double click the test.html file. If your browser needs a web server in order to load files locally, simply this:
+
+ npm install polpetta
+ polpetta ./
+
+then check [your localhost/test.html](http://127.0.0.1:1337/test.html) page and it should be green.
+
+
+### Shut Up And Give Me Code !
+You can find the [source code here](https://github.com/WebReflection/redefine/blob/master/src/redefine.js) and the [minified version here](https://github.com/WebReflection/redefine/blob/master/build/redefine.js).
+
+As you can see, once minzipped the library is **about 0.6 KB** and for an easier life enriched with new patterns I think is hard to expect a lighter utility.
+
+### De Facto Targets
+These are those situations where you might want to use `redefine.js`
+
+ * `node.js` development, or generally speaking any ES5 capable server side environment. The fact `redefine.js` is more robust should be an extra reason to adopt it.
+ * Smartphones, since nowadays, all of them support ES5
+ * modern desktop browsers and modern libraries
+
+Enjoy!
+
diff --git a/node_modules/redefine/build/redefine.js b/node_modules/redefine/build/redefine.js
new file mode 100644
index 0000000..689ecb7
--- /dev/null
+++ b/node_modules/redefine/build/redefine.js
@@ -0,0 +1,2 @@
+/*! (C) WebReflection Mit Style License */
+var _=this._=function(e,t,n){function q(e,t){for(var n={},r=T(e),i=0,s=r.length,o;i=0.2.0 <0.3.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/umzug"
+ ]
+ ],
+ "_from": "redefine@>=0.2.0 <0.3.0",
+ "_id": "redefine@0.2.1",
+ "_inCache": true,
+ "_location": "/redefine",
+ "_nodeVersion": "0.12.7",
+ "_npmUser": {
+ "name": "webreflection",
+ "email": "andrea.giammarchi@gmail.com"
+ },
+ "_npmVersion": "2.13.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "redefine@^0.2.0",
+ "scope": null,
+ "escapedName": "redefine",
+ "name": "redefine",
+ "rawSpec": "^0.2.0",
+ "spec": ">=0.2.0 <0.3.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/umzug"
+ ],
+ "_resolved": "https://registry.npmjs.org/redefine/-/redefine-0.2.1.tgz",
+ "_shasum": "e89ee7a6f24d19fff62590569332dc60380a89a3",
+ "_shrinkwrap": null,
+ "_spec": "redefine@^0.2.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/umzug",
+ "author": {
+ "name": "Andrea Giammarchi",
+ "email": "andrea.giammarchi@gmail.com",
+ "url": "http://webreflection.blogspot.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/WebReflection/redefine/issues"
+ },
+ "dependencies": {},
+ "description": "A lightweight utility for ES6 like classes and an easier ES5 aware object properties definition introducing new, performance oriented, patterns.",
+ "devDependencies": {
+ "wru": ">= 0.0.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "e89ee7a6f24d19fff62590569332dc60380a89a3",
+ "tarball": "https://registry.npmjs.org/redefine/-/redefine-0.2.1.tgz"
+ },
+ "engines": [
+ "node",
+ "rhino"
+ ],
+ "gitHead": "7e8037c729e4ed8219ea06716582f3b913ab6420",
+ "homepage": "https://github.com/WebReflection/redefine",
+ "keywords": [
+ "super",
+ "ES5",
+ "ES6",
+ "defineProperty",
+ "defineProperties",
+ "Object",
+ "create",
+ "inheritance",
+ "security",
+ "bind",
+ "bound",
+ "lazy",
+ "performance",
+ "safe",
+ "mixin",
+ "Class",
+ "OOP"
+ ],
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://mths.be/mit"
+ }
+ ],
+ "main": "./build/redefine.js",
+ "maintainers": [
+ {
+ "name": "webreflection",
+ "email": "andrea.giammarchi@gmail.com"
+ }
+ ],
+ "name": "redefine",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/WebReflection/redefine.git"
+ },
+ "scripts": {
+ "test": "node test/.test.js"
+ },
+ "version": "0.2.1"
+}
diff --git a/node_modules/redefine/template/license.after b/node_modules/redefine/template/license.after
new file mode 100644
index 0000000..d7365df
--- /dev/null
+++ b/node_modules/redefine/template/license.after
@@ -0,0 +1,2 @@
+
+*/
diff --git a/node_modules/redefine/template/license.before b/node_modules/redefine/template/license.before
new file mode 100644
index 0000000..bf11147
--- /dev/null
+++ b/node_modules/redefine/template/license.before
@@ -0,0 +1 @@
+/*!
diff --git a/node_modules/regex-cache/LICENSE b/node_modules/regex-cache/LICENSE
new file mode 100644
index 0000000..1e49edf
--- /dev/null
+++ b/node_modules/regex-cache/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+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/node_modules/regex-cache/README.md b/node_modules/regex-cache/README.md
new file mode 100644
index 0000000..ab19174
--- /dev/null
+++ b/node_modules/regex-cache/README.md
@@ -0,0 +1,160 @@
+# regex-cache [](https://www.npmjs.com/package/regex-cache) [](https://npmjs.org/package/regex-cache) [](https://travis-ci.org/jonschlinkert/regex-cache)
+
+> Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in suprising performance improvements.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install regex-cache --save
+```
+
+* Read [what this does](#what-this-does).
+* See [the benchmarks](#benchmarks)
+
+## Usage
+
+Wrap a function like this:
+
+```js
+var cache = require('regex-cache');
+var someRegex = cache(require('some-regex-lib'));
+```
+
+**Caching a regex**
+
+If you want to cache a regex after calling `new RegExp()`, or you're requiring a module that returns a regex, wrap it with a function first:
+
+```js
+var cache = require('regex-cache');
+
+function yourRegex(str, opts) {
+ // do stuff to str and opts
+ return new RegExp(str, opts.flags);
+}
+
+var regex = cache(yourRegex);
+```
+
+## Recommendations
+
+### Use this when...
+
+* **No options are passed** to the function that creates the regex. Regardless of how big or small the regex is, when zero options are passed, caching will be faster than not.
+* **A few options are passed**, and the values are primitives. The limited benchmarks I did show that caching is beneficial when up to 8 or 9 options are passed.
+
+### Do not use this when...
+
+* **The values of options are not primitives**. When non-primitives must be compared for equality, the time to compare the options is most likely as long or longer than the time to just create a new regex.
+
+### Example benchmarks
+
+Performance results, with and without regex-cache:
+
+```bash
+# no args passed (defaults)
+ with-cache x 8,699,231 ops/sec ±0.86% (93 runs sampled)
+ without-cache x 2,777,551 ops/sec ±0.63% (95 runs sampled)
+
+# string and six options passed
+ with-cache x 1,885,934 ops/sec ±0.80% (93 runs sampled)
+ without-cache x 1,256,893 ops/sec ±0.65% (97 runs sampled)
+
+# string only
+ with-cache x 7,723,256 ops/sec ±0.87% (92 runs sampled)
+ without-cache x 2,303,060 ops/sec ±0.47% (99 runs sampled)
+
+# one option passed
+ with-cache x 4,179,877 ops/sec ±0.53% (100 runs sampled)
+ without-cache x 2,198,422 ops/sec ±0.47% (95 runs sampled)
+
+# two options passed
+ with-cache x 3,256,222 ops/sec ±0.51% (99 runs sampled)
+ without-cache x 2,121,401 ops/sec ±0.79% (97 runs sampled)
+
+# six options passed
+ with-cache x 1,816,018 ops/sec ±1.08% (96 runs sampled)
+ without-cache x 1,157,176 ops/sec ±0.53% (100 runs sampled)
+
+#
+# diminishing returns happen about here
+#
+
+# ten options passed
+ with-cache x 1,210,598 ops/sec ±0.56% (92 runs sampled)
+ without-cache x 1,665,588 ops/sec ±1.07% (100 runs sampled)
+
+# twelve options passed
+ with-cache x 1,042,096 ops/sec ±0.68% (92 runs sampled)
+ without-cache x 1,389,414 ops/sec ±0.68% (97 runs sampled)
+
+# twenty options passed
+ with-cache x 661,125 ops/sec ±0.80% (93 runs sampled)
+ without-cache x 1,208,757 ops/sec ±0.65% (97 runs sampled)
+
+#
+# when non-primitive values are compared
+#
+
+# single value on the options is an object
+ with-cache x 1,398,313 ops/sec ±1.05% (95 runs sampled)
+ without-cache x 2,228,281 ops/sec ±0.56% (99 runs sampled)
+```
+
+## Run benchmarks
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm run benchmarks
+```
+
+## What this does
+
+If you're using `new RegExp('foo')` instead of a regex literal, it's probably because you need to dyamically generate a regex based on user options or some other potentially changing factors.
+
+When your function creates a string based on user inputs and passes it to the `RegExp` constructor, regex-cache caches the results. The next time the function is called if the key of a cached regex matches the user input (or no input was given), the cached regex is returned, avoiding unnecessary runtime compilation.
+
+Using the RegExp constructor offers a lot of flexibility, but the runtime compilation comes at a price - it's slow. Not specifically because of the call to the RegExp constructor, but **because you have to build up the string before `new RegExp()` is even called**.
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/regex-cache/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/regex-cache/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v, on April 01, 2016._
\ No newline at end of file
diff --git a/node_modules/regex-cache/index.js b/node_modules/regex-cache/index.js
new file mode 100644
index 0000000..13d2022
--- /dev/null
+++ b/node_modules/regex-cache/index.js
@@ -0,0 +1,69 @@
+/*!
+ * regex-cache
+ *
+ * Copyright (c) 2015 Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+var isPrimitive = require('is-primitive');
+var equal = require('is-equal-shallow');
+var basic = {};
+var cache = {};
+
+/**
+ * Expose `regexCache`
+ */
+
+module.exports = regexCache;
+
+/**
+ * Memoize the results of a call to the new RegExp constructor.
+ *
+ * @param {Function} fn [description]
+ * @param {String} str [description]
+ * @param {Options} options [description]
+ * @param {Boolean} nocompare [description]
+ * @return {RegExp}
+ */
+
+function regexCache(fn, str, opts) {
+ var key = '_default_', regex, cached;
+
+ if (!str && !opts) {
+ if (typeof fn !== 'function') {
+ return fn;
+ }
+ return basic[key] || (basic[key] = fn(str));
+ }
+
+ var isString = typeof str === 'string';
+ if (isString) {
+ if (!opts) {
+ return basic[str] || (basic[str] = fn(str));
+ }
+ key = str;
+ } else {
+ opts = str;
+ }
+
+ cached = cache[key];
+ if (cached && equal(cached.opts, opts)) {
+ return cached.regex;
+ }
+
+ memo(key, opts, (regex = fn(str, opts)));
+ return regex;
+}
+
+function memo(key, opts, regex) {
+ cache[key] = {regex: regex, opts: opts};
+}
+
+/**
+ * Expose `cache`
+ */
+
+module.exports.cache = cache;
+module.exports.basic = basic;
diff --git a/node_modules/regex-cache/package.json b/node_modules/regex-cache/package.json
new file mode 100644
index 0000000..6f3efc0
--- /dev/null
+++ b/node_modules/regex-cache/package.json
@@ -0,0 +1,131 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "regex-cache@^0.4.2",
+ "scope": null,
+ "escapedName": "regex-cache",
+ "name": "regex-cache",
+ "rawSpec": "^0.4.2",
+ "spec": ">=0.4.2 <0.5.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/micromatch"
+ ]
+ ],
+ "_from": "regex-cache@>=0.4.2 <0.5.0",
+ "_id": "regex-cache@0.4.3",
+ "_inCache": true,
+ "_location": "/regex-cache",
+ "_nodeVersion": "5.5.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/regex-cache-0.4.3.tgz_1459536604904_0.22530420310795307"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.6.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "regex-cache@^0.4.2",
+ "scope": null,
+ "escapedName": "regex-cache",
+ "name": "regex-cache",
+ "rawSpec": "^0.4.2",
+ "spec": ">=0.4.2 <0.5.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/micromatch"
+ ],
+ "_resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
+ "_shasum": "9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145",
+ "_shrinkwrap": null,
+ "_spec": "regex-cache@^0.4.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/micromatch",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/regex-cache/issues"
+ },
+ "dependencies": {
+ "is-equal-shallow": "^0.1.3",
+ "is-primitive": "^2.0.0"
+ },
+ "description": "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in suprising performance improvements.",
+ "devDependencies": {
+ "benchmarked": "^0.1.5",
+ "chalk": "^1.1.3",
+ "gulp-format-md": "^0.1.7",
+ "micromatch": "^2.3.7",
+ "should": "^8.3.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145",
+ "tarball": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "06ce46bda29a19064a968bd5d2d5596440be05ca",
+ "homepage": "https://github.com/jonschlinkert/regex-cache",
+ "keywords": [
+ "cache",
+ "expression",
+ "regex",
+ "regexp",
+ "regular",
+ "regular expression",
+ "store",
+ "to-regex"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ }
+ ],
+ "name": "regex-cache",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/regex-cache.git"
+ },
+ "scripts": {
+ "benchmarks": "node benchmark",
+ "test": "mocha"
+ },
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "0.4.3"
+}
diff --git a/node_modules/remove-trailing-separator/history.md b/node_modules/remove-trailing-separator/history.md
new file mode 100644
index 0000000..a9ca222
--- /dev/null
+++ b/node_modules/remove-trailing-separator/history.md
@@ -0,0 +1,9 @@
+## History
+
+### 1.0.1 - 25th Sep 2016
+
+- [b78606d](https://github.com/darsain/remove-trailing-separator/commit/af90b4e153a4527894741af6c7005acaeb78606d) Remove backslash only on win32 systems
+
+### 1.0.0 - 24th Sep 2016
+
+Initial release.
\ No newline at end of file
diff --git a/node_modules/remove-trailing-separator/index.js b/node_modules/remove-trailing-separator/index.js
new file mode 100644
index 0000000..1ed8e93
--- /dev/null
+++ b/node_modules/remove-trailing-separator/index.js
@@ -0,0 +1,13 @@
+const isWin = process.platform === 'win32';
+
+module.exports = function (str) {
+ while (endsInSeparator(str)) {
+ str = str.slice(0, -1);
+ }
+ return str;
+};
+
+function endsInSeparator(str) {
+ var last = str[str.length - 1];
+ return str.length > 1 && (last === '/' || (isWin && last === '\\'));
+}
diff --git a/node_modules/remove-trailing-separator/license b/node_modules/remove-trailing-separator/license
new file mode 100644
index 0000000..a169aff
--- /dev/null
+++ b/node_modules/remove-trailing-separator/license
@@ -0,0 +1,3 @@
+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.
\ No newline at end of file
diff --git a/node_modules/remove-trailing-separator/package.json b/node_modules/remove-trailing-separator/package.json
new file mode 100644
index 0000000..a4ba35d
--- /dev/null
+++ b/node_modules/remove-trailing-separator/package.json
@@ -0,0 +1,100 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "remove-trailing-separator@^1.0.1",
+ "scope": null,
+ "escapedName": "remove-trailing-separator",
+ "name": "remove-trailing-separator",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/normalize-path"
+ ]
+ ],
+ "_from": "remove-trailing-separator@>=1.0.1 <2.0.0",
+ "_id": "remove-trailing-separator@1.0.1",
+ "_inCache": true,
+ "_location": "/remove-trailing-separator",
+ "_nodeVersion": "6.4.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/remove-trailing-separator-1.0.1.tgz_1474797962066_0.45308714639395475"
+ },
+ "_npmUser": {
+ "name": "darsain",
+ "email": "darsain@gmail.com"
+ },
+ "_npmVersion": "3.10.5",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "remove-trailing-separator@^1.0.1",
+ "scope": null,
+ "escapedName": "remove-trailing-separator",
+ "name": "remove-trailing-separator",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/normalize-path"
+ ],
+ "_resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz",
+ "_shasum": "615ebb96af559552d4bf4057c8436d486ab63cc4",
+ "_shrinkwrap": null,
+ "_spec": "remove-trailing-separator@^1.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/normalize-path",
+ "author": {
+ "name": "darsain"
+ },
+ "bugs": {
+ "url": "https://github.com/darsain/remove-trailing-separator/issues"
+ },
+ "dependencies": {},
+ "description": "Removes separators from the end of the string.",
+ "devDependencies": {
+ "ava": "^0.16.0",
+ "coveralls": "^2.11.14",
+ "nyc": "^8.3.0",
+ "xo": "^0.16.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "615ebb96af559552d4bf4057c8436d486ab63cc4",
+ "tarball": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "8a5da3ac1efb1314d55e50a2a923b068d500d77a",
+ "homepage": "https://github.com/darsain/remove-trailing-separator#readme",
+ "keywords": [
+ "remove",
+ "strip",
+ "trailing",
+ "separator"
+ ],
+ "license": "ISC",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "darsain",
+ "email": "darsain@gmail.com"
+ }
+ ],
+ "name": "remove-trailing-separator",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/darsain/remove-trailing-separator.git"
+ },
+ "scripts": {
+ "lint": "xo",
+ "pretest": "npm run lint",
+ "report": "nyc report --reporter=html",
+ "test": "nyc ava"
+ },
+ "version": "1.0.1"
+}
diff --git a/node_modules/remove-trailing-separator/readme.md b/node_modules/remove-trailing-separator/readme.md
new file mode 100644
index 0000000..8c643d4
--- /dev/null
+++ b/node_modules/remove-trailing-separator/readme.md
@@ -0,0 +1,51 @@
+# remove-trailing-separator
+
+[![NPM version][npm-img]][npm-url] [![Build Status: Linux][travis-img]][travis-url] [![Build Status: Windows][appveyor-img]][appveyor-url] [![Coverage Status][coveralls-img]][coveralls-url]
+
+Removes all separators from the end of a string.
+
+## Install
+
+```
+npm install remove-trailing-separator
+```
+
+## Examples
+
+```js
+const removeTrailingSeparator = require('remove-trailing-separator');
+
+removeTrailingSeparator('/foo/bar/') // '/foo/bar'
+removeTrailingSeparator('/foo/bar///') // '/foo/bar'
+
+// leaves only/last separator
+removeTrailingSeparator('/') // '/'
+removeTrailingSeparator('///') // '/'
+
+// returns empty string
+removeTrailingSeparator('') // ''
+```
+
+## Backslash, or win32 separator
+
+`\` is considered a separator only on WIN32 systems. All UNIX compliant systems
+see backslash as a valid file name character, so it would break UNIX compliance
+to remove it there.
+
+In practice, this means that this code will return different things depending on
+what system it runs on:
+
+```
+removeTrailingSeparator('\\foo\\')
+// UNIX => '\\foo\\'
+// WIN32 => '\\foo'
+```
+
+[npm-url]: https://npmjs.org/package/remove-trailing-separator
+[npm-img]: https://badge.fury.io/js/remove-trailing-separator.svg
+[travis-url]: https://travis-ci.org/darsain/remove-trailing-separator
+[travis-img]: https://travis-ci.org/darsain/remove-trailing-separator.svg?branch=master
+[appveyor-url]: https://ci.appveyor.com/project/darsain/remove-trailing-separator/branch/master
+[appveyor-img]: https://ci.appveyor.com/api/projects/status/wvg9a93rrq95n2xl/branch/master?svg=true
+[coveralls-url]: https://coveralls.io/github/darsain/remove-trailing-separator?branch=master
+[coveralls-img]: https://coveralls.io/repos/github/darsain/remove-trailing-separator/badge.svg?branch=master
\ No newline at end of file
diff --git a/node_modules/repeat-element/LICENSE b/node_modules/repeat-element/LICENSE
new file mode 100644
index 0000000..33754da
--- /dev/null
+++ b/node_modules/repeat-element/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jon Schlinkert
+
+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/node_modules/repeat-element/README.md b/node_modules/repeat-element/README.md
new file mode 100644
index 0000000..008e20e
--- /dev/null
+++ b/node_modules/repeat-element/README.md
@@ -0,0 +1,71 @@
+# repeat-element [](http://badge.fury.io/js/repeat-element)
+
+> Create an array by repeating the given value n times.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```bash
+npm i repeat-element --save
+```
+
+## Usage
+
+```js
+var repeat = require('repeat-element');
+
+repeat('a', 5);
+//=> ['a', 'a', 'a', 'a', 'a']
+
+repeat('a', 1);
+//=> ['a']
+
+repeat('a', 0);
+//=> []
+
+repeat(null, 5)
+//» [ null, null, null, null, null ]
+
+repeat({some: 'object'}, 5)
+//» [ { some: 'object' },
+// { some: 'object' },
+// { some: 'object' },
+// { some: 'object' },
+// { some: 'object' } ]
+
+repeat(5, 5)
+//» [ 5, 5, 5, 5, 5 ]
+```
+
+## Related projects
+
+[repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string.
+
+## Running tests
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/repeat-element/issues)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright (c) 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 06, 2015._
diff --git a/node_modules/repeat-element/index.js b/node_modules/repeat-element/index.js
new file mode 100644
index 0000000..0ad45ab
--- /dev/null
+++ b/node_modules/repeat-element/index.js
@@ -0,0 +1,18 @@
+/*!
+ * repeat-element
+ *
+ * Copyright (c) 2015 Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+module.exports = function repeat(ele, num) {
+ var arr = new Array(num);
+
+ for (var i = 0; i < num; i++) {
+ arr[i] = ele;
+ }
+
+ return arr;
+};
diff --git a/node_modules/repeat-element/package.json b/node_modules/repeat-element/package.json
new file mode 100644
index 0000000..df28b80
--- /dev/null
+++ b/node_modules/repeat-element/package.json
@@ -0,0 +1,102 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "repeat-element@^1.1.2",
+ "scope": null,
+ "escapedName": "repeat-element",
+ "name": "repeat-element",
+ "rawSpec": "^1.1.2",
+ "spec": ">=1.1.2 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/braces"
+ ]
+ ],
+ "_from": "repeat-element@>=1.1.2 <2.0.0",
+ "_id": "repeat-element@1.1.2",
+ "_inCache": true,
+ "_location": "/repeat-element",
+ "_nodeVersion": "0.12.0",
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "2.5.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "repeat-element@^1.1.2",
+ "scope": null,
+ "escapedName": "repeat-element",
+ "name": "repeat-element",
+ "rawSpec": "^1.1.2",
+ "spec": ">=1.1.2 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/braces",
+ "/fill-range"
+ ],
+ "_resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "_shasum": "ef089a178d1483baae4d93eb98b4f9e4e11d990a",
+ "_shrinkwrap": null,
+ "_spec": "repeat-element@^1.1.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/braces",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/repeat-element/issues"
+ },
+ "dependencies": {},
+ "description": "Create an array by repeating the given value n times.",
+ "devDependencies": {
+ "benchmarked": "^0.1.4",
+ "chalk": "^1.0.0",
+ "glob": "^5.0.5",
+ "minimist": "^1.1.1",
+ "mocha": "^2.2.4"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "ef089a178d1483baae4d93eb98b4f9e4e11d990a",
+ "tarball": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "7a6b21d58eafcc44fc8de133c70a8398ee9fdd8d",
+ "homepage": "https://github.com/jonschlinkert/repeat-element",
+ "keywords": [
+ "array",
+ "element",
+ "repeat",
+ "string"
+ ],
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/jonschlinkert/repeat-element/blob/master/LICENSE"
+ },
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ }
+ ],
+ "name": "repeat-element",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jonschlinkert/repeat-element.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "1.1.2"
+}
diff --git a/node_modules/repeat-string/LICENSE b/node_modules/repeat-string/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/repeat-string/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/repeat-string/README.md b/node_modules/repeat-string/README.md
new file mode 100644
index 0000000..aaa5e91
--- /dev/null
+++ b/node_modules/repeat-string/README.md
@@ -0,0 +1,136 @@
+# repeat-string [](https://www.npmjs.com/package/repeat-string) [](https://npmjs.org/package/repeat-string) [](https://npmjs.org/package/repeat-string) [](https://travis-ci.org/jonschlinkert/repeat-string)
+
+> Repeat the given string n times. Fastest implementation for repeating a string.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save repeat-string
+```
+
+## Usage
+
+### [repeat](index.js#L41)
+
+Repeat the given `string` the specified `number` of times.
+
+**Example:**
+
+**Example**
+
+```js
+var repeat = require('repeat-string');
+repeat('A', 5);
+//=> AAAAA
+```
+
+**Params**
+
+* `string` **{String}**: The string to repeat
+* `number` **{Number}**: The number of times to repeat the string
+* `returns` **{String}**: Repeated string
+
+## Benchmarks
+
+Repeat string is significantly faster than the native method (which is itself faster than [repeating](https://github.com/sindresorhus/repeating)):
+
+```sh
+# 2x
+repeat-string █████████████████████████ (26,953,977 ops/sec)
+repeating █████████ (9,855,695 ops/sec)
+native ██████████████████ (19,453,895 ops/sec)
+
+# 3x
+repeat-string █████████████████████████ (19,445,252 ops/sec)
+repeating ███████████ (8,661,565 ops/sec)
+native ████████████████████ (16,020,598 ops/sec)
+
+# 10x
+repeat-string █████████████████████████ (23,792,521 ops/sec)
+repeating █████████ (8,571,332 ops/sec)
+native ███████████████ (14,582,955 ops/sec)
+
+# 50x
+repeat-string █████████████████████████ (23,640,179 ops/sec)
+repeating █████ (5,505,509 ops/sec)
+native ██████████ (10,085,557 ops/sec)
+
+# 250x
+repeat-string █████████████████████████ (23,489,618 ops/sec)
+repeating ████ (3,962,937 ops/sec)
+native ████████ (7,724,892 ops/sec)
+
+# 2000x
+repeat-string █████████████████████████ (20,315,172 ops/sec)
+repeating ████ (3,297,079 ops/sec)
+native ███████ (6,203,331 ops/sec)
+
+# 20000x
+repeat-string █████████████████████████ (23,382,915 ops/sec)
+repeating ███ (2,980,058 ops/sec)
+native █████ (5,578,808 ops/sec)
+```
+
+**Run the benchmarks**
+
+Install dev dependencies:
+
+```sh
+npm i -d && node benchmark
+```
+
+## About
+
+### Related projects
+
+[repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 51 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [LinusU](https://github.com/LinusU) |
+| 2 | [tbusser](https://github.com/tbusser) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [wooorm](https://github.com/wooorm) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](http://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/repeat-string/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 23, 2016._
\ No newline at end of file
diff --git a/node_modules/repeat-string/index.js b/node_modules/repeat-string/index.js
new file mode 100644
index 0000000..4459afd
--- /dev/null
+++ b/node_modules/repeat-string/index.js
@@ -0,0 +1,70 @@
+/*!
+ * repeat-string
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Results cache
+ */
+
+var res = '';
+var cache;
+
+/**
+ * Expose `repeat`
+ */
+
+module.exports = repeat;
+
+/**
+ * Repeat the given `string` the specified `number`
+ * of times.
+ *
+ * **Example:**
+ *
+ * ```js
+ * var repeat = require('repeat-string');
+ * repeat('A', 5);
+ * //=> AAAAA
+ * ```
+ *
+ * @param {String} `string` The string to repeat
+ * @param {Number} `number` The number of times to repeat the string
+ * @return {String} Repeated string
+ * @api public
+ */
+
+function repeat(str, num) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ // cover common, quick use cases
+ if (num === 1) return str;
+ if (num === 2) return str + str;
+
+ var max = str.length * num;
+ if (cache !== str || typeof cache === 'undefined') {
+ cache = str;
+ res = '';
+ } else if (res.length >= max) {
+ return res.substr(0, max);
+ }
+
+ while (max > res.length && num > 1) {
+ if (num & 1) {
+ res += str;
+ }
+
+ num >>= 1;
+ str += str;
+ }
+
+ res += str;
+ res = res.substr(0, max);
+ return res;
+}
diff --git a/node_modules/repeat-string/package.json b/node_modules/repeat-string/package.json
new file mode 100644
index 0000000..43286dd
--- /dev/null
+++ b/node_modules/repeat-string/package.json
@@ -0,0 +1,168 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "repeat-string@^1.5.2",
+ "scope": null,
+ "escapedName": "repeat-string",
+ "name": "repeat-string",
+ "rawSpec": "^1.5.2",
+ "spec": ">=1.5.2 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/align-text"
+ ]
+ ],
+ "_from": "repeat-string@>=1.5.2 <2.0.0",
+ "_id": "repeat-string@1.6.1",
+ "_inCache": true,
+ "_location": "/repeat-string",
+ "_nodeVersion": "6.7.0",
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/repeat-string-1.6.1.tgz_1477241638674_0.3764322670176625"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.10.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "repeat-string@^1.5.2",
+ "scope": null,
+ "escapedName": "repeat-string",
+ "name": "repeat-string",
+ "rawSpec": "^1.5.2",
+ "spec": ">=1.5.2 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/align-text"
+ ],
+ "_resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "_shasum": "8dcae470e1c88abc2d600fff4a776286da75e637",
+ "_shrinkwrap": null,
+ "_spec": "repeat-string@^1.5.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/align-text",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "http://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/repeat-string/issues"
+ },
+ "contributors": [
+ {
+ "name": "Brian Woodward",
+ "email": "brian.woodward@gmail.com",
+ "url": "https://github.com/doowb"
+ },
+ {
+ "name": "Jon Schlinkert",
+ "email": "jon.schlinkert@sellside.com",
+ "url": "http://twitter.com/jonschlinkert"
+ },
+ {
+ "name": "Linus Unnebäck",
+ "email": "linus@folkdatorn.se",
+ "url": "http://linus.unnebäck.se"
+ },
+ {
+ "name": "Thijs Busser",
+ "email": "tbusser@gmail.com",
+ "url": "http://tbusser.net"
+ },
+ {
+ "name": "Titus",
+ "email": "tituswormer@gmail.com",
+ "url": "wooorm.com"
+ }
+ ],
+ "dependencies": {},
+ "description": "Repeat the given string n times. Fastest implementation for repeating a string.",
+ "devDependencies": {
+ "ansi-cyan": "^0.1.1",
+ "benchmarked": "^0.2.5",
+ "gulp-format-md": "^0.1.11",
+ "isobject": "^2.1.0",
+ "mocha": "^3.1.2",
+ "repeating": "^3.0.0",
+ "text-table": "^0.2.0",
+ "yargs-parser": "^4.0.2"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "8dcae470e1c88abc2d600fff4a776286da75e637",
+ "tarball": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "1a95c5d99a02999ccd2cf4663959a18bd2def7b8",
+ "homepage": "https://github.com/jonschlinkert/repeat-string",
+ "keywords": [
+ "fast",
+ "fastest",
+ "fill",
+ "left",
+ "left-pad",
+ "multiple",
+ "pad",
+ "padding",
+ "repeat",
+ "repeating",
+ "repetition",
+ "right",
+ "right-pad",
+ "string",
+ "times"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ {
+ "name": "doowb",
+ "email": "brian.woodward@gmail.com"
+ }
+ ],
+ "name": "repeat-string",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/repeat-string.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "repeat-element"
+ ]
+ },
+ "helpers": [
+ "./benchmark/helper.js"
+ ],
+ "reflinks": [
+ "verb"
+ ]
+ },
+ "version": "1.6.1"
+}
diff --git a/node_modules/replace-ext/.npmignore b/node_modules/replace-ext/.npmignore
new file mode 100644
index 0000000..b5ef13a
--- /dev/null
+++ b/node_modules/replace-ext/.npmignore
@@ -0,0 +1,6 @@
+.DS_Store
+*.log
+node_modules
+build
+*.node
+components
\ No newline at end of file
diff --git a/node_modules/replace-ext/.travis.yml b/node_modules/replace-ext/.travis.yml
new file mode 100644
index 0000000..8101b9f
--- /dev/null
+++ b/node_modules/replace-ext/.travis.yml
@@ -0,0 +1,8 @@
+language: node_js
+node_js:
+ - "0.7"
+ - "0.8"
+ - "0.9"
+ - "0.10"
+after_script:
+ - npm run coveralls
\ No newline at end of file
diff --git a/node_modules/replace-ext/LICENSE b/node_modules/replace-ext/LICENSE
new file mode 100755
index 0000000..7cbe012
--- /dev/null
+++ b/node_modules/replace-ext/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2014 Fractal
+
+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/node_modules/replace-ext/README.md b/node_modules/replace-ext/README.md
new file mode 100644
index 0000000..05b5d21
--- /dev/null
+++ b/node_modules/replace-ext/README.md
@@ -0,0 +1,44 @@
+# replace-ext [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][david-image]][david-url]
+
+
+## Information
+
+
+
+Package replace-ext
+
+
+Description
+Replaces a file extension with another one
+
+
+Node Version
+>= 0.4
+
+
+
+## Usage
+
+```javascript
+var replaceExt = require('replace-ext');
+
+var path = '/some/dir/file.js';
+var npath = replaceExt(path, '.coffee');
+
+console.log(npath); // /some/dir/file.coffee
+```
+
+[npm-url]: https://npmjs.org/package/replace-ext
+[npm-image]: https://badge.fury.io/js/replace-ext.png
+
+[travis-url]: https://travis-ci.org/wearefractal/replace-ext
+[travis-image]: https://travis-ci.org/wearefractal/replace-ext.png?branch=master
+
+[coveralls-url]: https://coveralls.io/r/wearefractal/replace-ext
+[coveralls-image]: https://coveralls.io/repos/wearefractal/replace-ext/badge.png
+
+[depstat-url]: https://david-dm.org/wearefractal/replace-ext
+[depstat-image]: https://david-dm.org/wearefractal/replace-ext.png
+
+[david-url]: https://david-dm.org/wearefractal/replace-ext
+[david-image]: https://david-dm.org/wearefractal/replace-ext.png?theme=shields.io
\ No newline at end of file
diff --git a/node_modules/replace-ext/index.js b/node_modules/replace-ext/index.js
new file mode 100644
index 0000000..3f76938
--- /dev/null
+++ b/node_modules/replace-ext/index.js
@@ -0,0 +1,9 @@
+var path = require('path');
+
+module.exports = function(npath, ext) {
+ if (typeof npath !== 'string') return npath;
+ if (npath.length === 0) return npath;
+
+ var nFileName = path.basename(npath, path.extname(npath))+ext;
+ return path.join(path.dirname(npath), nFileName);
+};
\ No newline at end of file
diff --git a/node_modules/replace-ext/package.json b/node_modules/replace-ext/package.json
new file mode 100644
index 0000000..da29838
--- /dev/null
+++ b/node_modules/replace-ext/package.json
@@ -0,0 +1,97 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "replace-ext@0.0.1",
+ "scope": null,
+ "escapedName": "replace-ext",
+ "name": "replace-ext",
+ "rawSpec": "0.0.1",
+ "spec": "0.0.1",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util"
+ ]
+ ],
+ "_from": "replace-ext@0.0.1",
+ "_id": "replace-ext@0.0.1",
+ "_inCache": true,
+ "_location": "/replace-ext",
+ "_npmUser": {
+ "name": "fractal",
+ "email": "contact@wearefractal.com"
+ },
+ "_npmVersion": "1.4.4",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "replace-ext@0.0.1",
+ "scope": null,
+ "escapedName": "replace-ext",
+ "name": "replace-ext",
+ "rawSpec": "0.0.1",
+ "spec": "0.0.1",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/gulp-util",
+ "/vinyl"
+ ],
+ "_resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "_shasum": "29bbd92078a739f0bcce2b4ee41e837953522924",
+ "_shrinkwrap": null,
+ "_spec": "replace-ext@0.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/gulp-util",
+ "author": {
+ "name": "Fractal",
+ "email": "contact@wearefractal.com",
+ "url": "http://wearefractal.com/"
+ },
+ "bugs": {
+ "url": "https://github.com/wearefractal/replace-ext/issues"
+ },
+ "dependencies": {},
+ "description": "Replaces a file extension with another one",
+ "devDependencies": {
+ "coveralls": "~2.6.1",
+ "istanbul": "~0.2.3",
+ "jshint": "~2.4.1",
+ "mocha": "~1.17.0",
+ "mocha-lcov-reporter": "~0.0.1",
+ "rimraf": "~2.2.5",
+ "should": "~3.1.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "29bbd92078a739f0bcce2b4ee41e837953522924",
+ "tarball": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "homepage": "http://github.com/wearefractal/replace-ext",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://github.com/wearefractal/replace-ext/raw/master/LICENSE"
+ }
+ ],
+ "main": "./index.js",
+ "maintainers": [
+ {
+ "name": "fractal",
+ "email": "contact@wearefractal.com"
+ }
+ ],
+ "name": "replace-ext",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/wearefractal/replace-ext.git"
+ },
+ "scripts": {
+ "coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage",
+ "test": "mocha --reporter spec && jshint"
+ },
+ "version": "0.0.1"
+}
diff --git a/node_modules/replace-ext/test/main.js b/node_modules/replace-ext/test/main.js
new file mode 100644
index 0000000..5137702
--- /dev/null
+++ b/node_modules/replace-ext/test/main.js
@@ -0,0 +1,51 @@
+var replaceExt = require('../');
+var path = require('path');
+var should = require('should');
+require('mocha');
+
+describe('replace-ext', function() {
+ it('should return a valid replaced extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test.coffee');
+ var expected = path.join(__dirname, './fixtures/test.js');
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid replaced extension on flat', function(done) {
+ var fname = 'test.coffee';
+ var expected = 'test.js';
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should not return a valid replaced extension on empty string', function(done) {
+ var fname = '';
+ var expected = '';
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid removed extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test.coffee');
+ var expected = path.join(__dirname, './fixtures/test');
+ var nu = replaceExt(fname, '');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+
+ it('should return a valid added extension on nested', function(done) {
+ var fname = path.join(__dirname, './fixtures/test');
+ var expected = path.join(__dirname, './fixtures/test.js');
+ var nu = replaceExt(fname, '.js');
+ should.exist(nu);
+ nu.should.equal(expected);
+ done();
+ });
+});
diff --git a/node_modules/require-directory/.jshintrc b/node_modules/require-directory/.jshintrc
new file mode 100644
index 0000000..e14e4dc
--- /dev/null
+++ b/node_modules/require-directory/.jshintrc
@@ -0,0 +1,67 @@
+{
+ "maxerr" : 50,
+ "bitwise" : true,
+ "camelcase" : true,
+ "curly" : true,
+ "eqeqeq" : true,
+ "forin" : true,
+ "immed" : true,
+ "indent" : 2,
+ "latedef" : true,
+ "newcap" : true,
+ "noarg" : true,
+ "noempty" : true,
+ "nonew" : true,
+ "plusplus" : true,
+ "quotmark" : true,
+ "undef" : true,
+ "unused" : true,
+ "strict" : true,
+ "trailing" : true,
+ "maxparams" : false,
+ "maxdepth" : false,
+ "maxstatements" : false,
+ "maxcomplexity" : false,
+ "maxlen" : false,
+ "asi" : false,
+ "boss" : false,
+ "debug" : false,
+ "eqnull" : true,
+ "es5" : false,
+ "esnext" : false,
+ "moz" : false,
+ "evil" : false,
+ "expr" : true,
+ "funcscope" : true,
+ "globalstrict" : true,
+ "iterator" : true,
+ "lastsemic" : false,
+ "laxbreak" : false,
+ "laxcomma" : false,
+ "loopfunc" : false,
+ "multistr" : false,
+ "proto" : false,
+ "scripturl" : false,
+ "smarttabs" : false,
+ "shadow" : false,
+ "sub" : false,
+ "supernew" : false,
+ "validthis" : false,
+ "browser" : true,
+ "couch" : false,
+ "devel" : true,
+ "dojo" : false,
+ "jquery" : false,
+ "mootools" : false,
+ "node" : true,
+ "nonstandard" : false,
+ "prototypejs" : false,
+ "rhino" : false,
+ "worker" : false,
+ "wsh" : false,
+ "yui" : false,
+ "nomen" : true,
+ "onevar" : true,
+ "passfail" : false,
+ "white" : true
+}
diff --git a/node_modules/require-directory/.npmignore b/node_modules/require-directory/.npmignore
new file mode 100644
index 0000000..47cf365
--- /dev/null
+++ b/node_modules/require-directory/.npmignore
@@ -0,0 +1 @@
+test/**
diff --git a/node_modules/require-directory/.travis.yml b/node_modules/require-directory/.travis.yml
new file mode 100644
index 0000000..20fd86b
--- /dev/null
+++ b/node_modules/require-directory/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - 0.10
diff --git a/node_modules/require-directory/LICENSE b/node_modules/require-directory/LICENSE
new file mode 100644
index 0000000..a70f253
--- /dev/null
+++ b/node_modules/require-directory/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2011 Troy Goode
+
+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/node_modules/require-directory/README.markdown b/node_modules/require-directory/README.markdown
new file mode 100644
index 0000000..926a063
--- /dev/null
+++ b/node_modules/require-directory/README.markdown
@@ -0,0 +1,184 @@
+# require-directory
+
+Recursively iterates over specified directory, `require()`'ing each file, and returning a nested hash structure containing those modules.
+
+**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)**
+
+[](https://nodei.co/npm/require-directory/)
+
+[](http://travis-ci.org/troygoode/node-require-directory)
+
+## How To Use
+
+### Installation (via [npm](https://npmjs.org/package/require-directory))
+
+```bash
+$ npm install require-directory
+```
+
+### Usage
+
+A common pattern in node.js is to include an index file which creates a hash of the files in its current directory. Given a directory structure like so:
+
+* app.js
+* routes/
+ * index.js
+ * home.js
+ * auth/
+ * login.js
+ * logout.js
+ * register.js
+
+`routes/index.js` uses `require-directory` to build the hash (rather than doing so manually) like so:
+
+```javascript
+var requireDirectory = require('require-directory');
+module.exports = requireDirectory(module);
+```
+
+`app.js` references `routes/index.js` like any other module, but it now has a hash/tree of the exports from the `./routes/` directory:
+
+```javascript
+var routes = require('./routes');
+
+// snip
+
+app.get('/', routes.home);
+app.get('/register', routes.auth.register);
+app.get('/login', routes.auth.login);
+app.get('/logout', routes.auth.logout);
+```
+
+The `routes` variable above is the equivalent of this:
+
+```javascript
+var routes = {
+ home: require('routes/home.js'),
+ auth: {
+ login: require('routes/auth/login.js'),
+ logout: require('routes/auth/logout.js'),
+ register: require('routes/auth/register.js')
+ }
+};
+```
+
+*Note that `routes.index` will be `undefined` as you would hope.*
+
+### Specifying Another Directory
+
+You can specify which directory you want to build a tree of (if it isn't the current directory for whatever reason) by passing it as the second parameter. Not specifying the path (`requireDirectory(module)`) is the equivelant of `requireDirectory(module, __dirname)`:
+
+```javascript
+var requireDirectory = require('require-directory');
+module.exports = requireDirectory(module, './some/subdirectory');
+```
+
+For example, in the [example in the Usage section](#usage) we could have avoided creating `routes/index.js` and instead changed the first lines of `app.js` to:
+
+```javascript
+var requireDirectory = require('require-directory');
+var routes = requireDirectory(module, './routes');
+```
+
+## Options
+
+You can pass an options hash to `require-directory` as the 2nd parameter (or 3rd if you're passing the path to another directory as the 2nd parameter already). Here are the available options:
+
+### Whitelisting
+
+Whitelisting (either via RegExp or function) allows you to specify that only certain files be loaded.
+
+```javascript
+var requireDirectory = require('require-directory'),
+ whitelist = /onlyinclude.js$/,
+ hash = requireDirectory(module, {include: whitelist});
+```
+
+```javascript
+var requireDirectory = require('require-directory'),
+ check = function(path){
+ if(/onlyinclude.js$/.test(path)){
+ return true; // don't include
+ }else{
+ return false; // go ahead and include
+ }
+ },
+ hash = requireDirectory(module, {include: check});
+```
+
+### Blacklisting
+
+Blacklisting (either via RegExp or function) allows you to specify that all but certain files should be loaded.
+
+```javascript
+var requireDirectory = require('require-directory'),
+ blacklist = /dontinclude\.js$/,
+ hash = requireDirectory(module, {exclude: blacklist});
+```
+
+```javascript
+var requireDirectory = require('require-directory'),
+ check = function(path){
+ if(/dontinclude\.js$/.test(path)){
+ return false; // don't include
+ }else{
+ return true; // go ahead and include
+ }
+ },
+ hash = requireDirectory(module, {exclude: check});
+```
+
+### Visiting Objects As They're Loaded
+
+`require-directory` takes a function as the `visit` option that will be called for each module that is added to module.exports.
+
+```javascript
+var requireDirectory = require('require-directory'),
+ visitor = function(obj) {
+ console.log(obj); // will be called for every module that is loaded
+ },
+ hash = requireDirectory(module, {visit: visitor});
+```
+
+The visitor can also transform the objects by returning a value:
+
+```javascript
+var requireDirectory = require('require-directory'),
+ visitor = function(obj) {
+ return obj(new Date());
+ },
+ hash = requireDirectory(module, {visit: visitor});
+```
+
+### Renaming Keys
+
+```javascript
+var requireDirectory = require('require-directory'),
+ renamer = function(name) {
+ return name.toUpperCase();
+ },
+ hash = requireDirectory(module, {rename: renamer});
+```
+
+### No Recursion
+
+```javascript
+var requireDirectory = require('require-directory'),
+ hash = requireDirectory(module, {recurse: false});
+```
+
+## Run Unit Tests
+
+```bash
+$ npm run lint
+$ npm test
+```
+
+## License
+
+[MIT License](http://www.opensource.org/licenses/mit-license.php)
+
+## Author
+
+[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com))
+
diff --git a/node_modules/require-directory/index.js b/node_modules/require-directory/index.js
new file mode 100644
index 0000000..cd37da7
--- /dev/null
+++ b/node_modules/require-directory/index.js
@@ -0,0 +1,86 @@
+'use strict';
+
+var fs = require('fs'),
+ join = require('path').join,
+ resolve = require('path').resolve,
+ dirname = require('path').dirname,
+ defaultOptions = {
+ extensions: ['js', 'json', 'coffee'],
+ recurse: true,
+ rename: function (name) {
+ return name;
+ },
+ visit: function (obj) {
+ return obj;
+ }
+ };
+
+function checkFileInclusion(path, filename, options) {
+ return (
+ // verify file has valid extension
+ (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) &&
+
+ // if options.include is a RegExp, evaluate it and make sure the path passes
+ !(options.include && options.include instanceof RegExp && !options.include.test(path)) &&
+
+ // if options.include is a function, evaluate it and make sure the path passes
+ !(options.include && typeof options.include === 'function' && !options.include(path, filename)) &&
+
+ // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass
+ !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) &&
+
+ // if options.exclude is a function, evaluate it and make sure the path doesn't pass
+ !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename))
+ );
+}
+
+function requireDirectory(m, path, options) {
+ var retval = {};
+
+ // path is optional
+ if (path && !options && typeof path !== 'string') {
+ options = path;
+ path = null;
+ }
+
+ // default options
+ options = options || {};
+ for (var prop in defaultOptions) {
+ if (typeof options[prop] === 'undefined') {
+ options[prop] = defaultOptions[prop];
+ }
+ }
+
+ // if no path was passed in, assume the equivelant of __dirname from caller
+ // otherwise, resolve path relative to the equivalent of __dirname
+ path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path);
+
+ // get the path of each file in specified directory, append to current tree node, recurse
+ fs.readdirSync(path).forEach(function (filename) {
+ var joined = join(path, filename),
+ files,
+ key,
+ obj;
+
+ if (fs.statSync(joined).isDirectory() && options.recurse) {
+ // this node is a directory; recurse
+ files = requireDirectory(m, joined, options);
+ // exclude empty directories
+ if (Object.keys(files).length) {
+ retval[options.rename(filename, joined, filename)] = files;
+ }
+ } else {
+ if (joined !== m.filename && checkFileInclusion(joined, filename, options)) {
+ // hash node key shouldn't include file extension
+ key = filename.substring(0, filename.lastIndexOf('.'));
+ obj = m.require(joined);
+ retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj;
+ }
+ }
+ });
+
+ return retval;
+}
+
+module.exports = requireDirectory;
+module.exports.defaults = defaultOptions;
diff --git a/node_modules/require-directory/package.json b/node_modules/require-directory/package.json
new file mode 100644
index 0000000..711ae38
--- /dev/null
+++ b/node_modules/require-directory/package.json
@@ -0,0 +1,101 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "require-directory@^2.1.1",
+ "scope": null,
+ "escapedName": "require-directory",
+ "name": "require-directory",
+ "rawSpec": "^2.1.1",
+ "spec": ">=2.1.1 <3.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs"
+ ]
+ ],
+ "_from": "require-directory@>=2.1.1 <3.0.0",
+ "_id": "require-directory@2.1.1",
+ "_inCache": true,
+ "_location": "/require-directory",
+ "_nodeVersion": "0.12.0",
+ "_npmUser": {
+ "name": "troygoode",
+ "email": "troygoode@gmail.com"
+ },
+ "_npmVersion": "2.5.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "require-directory@^2.1.1",
+ "scope": null,
+ "escapedName": "require-directory",
+ "name": "require-directory",
+ "rawSpec": "^2.1.1",
+ "spec": ">=2.1.1 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/sequelize-cli/yargs"
+ ],
+ "_resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "_shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
+ "_shrinkwrap": null,
+ "_spec": "require-directory@^2.1.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs",
+ "author": {
+ "name": "Troy Goode",
+ "email": "troygoode@gmail.com",
+ "url": "http://github.com/troygoode/"
+ },
+ "bugs": {
+ "url": "http://github.com/troygoode/node-require-directory/issues/"
+ },
+ "contributors": [
+ {
+ "name": "Troy Goode",
+ "email": "troygoode@gmail.com",
+ "url": "http://github.com/troygoode/"
+ }
+ ],
+ "dependencies": {},
+ "description": "Recursively iterates over specified directory, require()'ing each file, and returning a nested hash structure containing those modules.",
+ "devDependencies": {
+ "jshint": "^2.6.0",
+ "mocha": "^2.1.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
+ "tarball": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "gitHead": "cc71c23dd0c16cefd26855303c16ca1b9b50a36d",
+ "homepage": "https://github.com/troygoode/node-require-directory/",
+ "keywords": [
+ "require",
+ "directory",
+ "library",
+ "recursive"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "troygoode",
+ "email": "troygoode@gmail.com"
+ }
+ ],
+ "name": "require-directory",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/troygoode/node-require-directory.git"
+ },
+ "scripts": {
+ "lint": "jshint index.js test/test.js",
+ "test": "mocha"
+ },
+ "version": "2.1.1"
+}
diff --git a/node_modules/require-main-filename/.npmignore b/node_modules/require-main-filename/.npmignore
new file mode 100644
index 0000000..6f9fe6b
--- /dev/null
+++ b/node_modules/require-main-filename/.npmignore
@@ -0,0 +1,3 @@
+node_modules
+.DS_Store
+.nyc_output
diff --git a/node_modules/require-main-filename/.travis.yml b/node_modules/require-main-filename/.travis.yml
new file mode 100644
index 0000000..ab61ce7
--- /dev/null
+++ b/node_modules/require-main-filename/.travis.yml
@@ -0,0 +1,8 @@
+language: node_js
+os:
+ - linux
+node_js:
+ - "0.10"
+ - "0.12"
+ - "4.1"
+ - "node"
diff --git a/node_modules/require-main-filename/LICENSE.txt b/node_modules/require-main-filename/LICENSE.txt
new file mode 100644
index 0000000..836440b
--- /dev/null
+++ b/node_modules/require-main-filename/LICENSE.txt
@@ -0,0 +1,14 @@
+Copyright (c) 2016, Contributors
+
+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/node_modules/require-main-filename/README.md b/node_modules/require-main-filename/README.md
new file mode 100644
index 0000000..820d9f5
--- /dev/null
+++ b/node_modules/require-main-filename/README.md
@@ -0,0 +1,26 @@
+# require-main-filename
+
+[](https://travis-ci.org/yargs/require-main-filename)
+[](https://coveralls.io/r/yargs/require-main-filename?branch=master)
+[](https://www.npmjs.com/package/require-main-filename)
+
+`require.main.filename` is great for figuring out the entry
+point for the current application. This can be combined with a module like
+[pkg-conf](https://www.npmjs.com/package/pkg-conf) to, _as if by magic_, load
+top-level configuration.
+
+Unfortunately, `require.main.filename` sometimes fails when an application is
+executed with an alternative process manager, e.g., [iisnode](https://github.com/tjanczuk/iisnode).
+
+`require-main-filename` is a shim that addresses this problem.
+
+## Usage
+
+```js
+var main = require('require-main-filename')()
+// use main as an alternative to require.main.filename.
+```
+
+## License
+
+ISC
diff --git a/node_modules/require-main-filename/index.js b/node_modules/require-main-filename/index.js
new file mode 100644
index 0000000..dca7f0c
--- /dev/null
+++ b/node_modules/require-main-filename/index.js
@@ -0,0 +1,18 @@
+module.exports = function (_require) {
+ _require = _require || require
+ var main = _require.main
+ if (main && isIISNode(main)) return handleIISNode(main)
+ else return main ? main.filename : process.cwd()
+}
+
+function isIISNode (main) {
+ return /\\iisnode\\/.test(main.filename)
+}
+
+function handleIISNode (main) {
+ if (!main.children.length) {
+ return main.filename
+ } else {
+ return main.children[0].filename
+ }
+}
diff --git a/node_modules/require-main-filename/package.json b/node_modules/require-main-filename/package.json
new file mode 100644
index 0000000..2f451e0
--- /dev/null
+++ b/node_modules/require-main-filename/package.json
@@ -0,0 +1,94 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "require-main-filename@^1.0.1",
+ "scope": null,
+ "escapedName": "require-main-filename",
+ "name": "require-main-filename",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs"
+ ]
+ ],
+ "_from": "require-main-filename@>=1.0.1 <2.0.0",
+ "_id": "require-main-filename@1.0.1",
+ "_inCache": true,
+ "_location": "/require-main-filename",
+ "_nodeVersion": "3.2.0",
+ "_npmOperationalInternal": {
+ "host": "packages-6-west.internal.npmjs.com",
+ "tmp": "tmp/require-main-filename-1.0.1.tgz_1455688492890_0.0750324921682477"
+ },
+ "_npmUser": {
+ "name": "bcoe",
+ "email": "ben@npmjs.com"
+ },
+ "_npmVersion": "3.3.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "require-main-filename@^1.0.1",
+ "scope": null,
+ "escapedName": "require-main-filename",
+ "name": "require-main-filename",
+ "rawSpec": "^1.0.1",
+ "spec": ">=1.0.1 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/sequelize-cli/yargs"
+ ],
+ "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "_shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1",
+ "_shrinkwrap": null,
+ "_spec": "require-main-filename@^1.0.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli/node_modules/yargs",
+ "author": {
+ "name": "Ben Coe",
+ "email": "ben@npmjs.com"
+ },
+ "bugs": {
+ "url": "https://github.com/yargs/require-main-filename/issues"
+ },
+ "dependencies": {},
+ "description": "shim for require.main.filename() that works in as many environments as possible",
+ "devDependencies": {
+ "chai": "^3.5.0",
+ "standard": "^6.0.5",
+ "tap": "^5.2.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1",
+ "tarball": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz"
+ },
+ "gitHead": "6dd2291332bed764c56302ccdd14da8a213249a1",
+ "homepage": "https://github.com/yargs/require-main-filename#readme",
+ "keywords": [
+ "require",
+ "shim",
+ "iisnode"
+ ],
+ "license": "ISC",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "bcoe",
+ "email": "ben@npmjs.com"
+ }
+ ],
+ "name": "require-main-filename",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/yargs/require-main-filename.git"
+ },
+ "scripts": {
+ "pretest": "standard",
+ "test": "tap --coverage test.js"
+ },
+ "version": "1.0.1"
+}
diff --git a/node_modules/require-main-filename/test.js b/node_modules/require-main-filename/test.js
new file mode 100644
index 0000000..d89e7dc
--- /dev/null
+++ b/node_modules/require-main-filename/test.js
@@ -0,0 +1,36 @@
+/* global describe, it */
+
+var requireMainFilename = require('./')
+
+require('tap').mochaGlobals()
+require('chai').should()
+
+describe('require-main-filename', function () {
+ it('returns require.main.filename in normal circumstances', function () {
+ requireMainFilename().should.match(/test\.js/)
+ })
+
+ it('should use children[0].filename when running on iisnode', function () {
+ var main = {
+ filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js',
+ children: [ {filename: 'D:\\home\\site\\wwwroot\\server.js'} ]
+ }
+ requireMainFilename({
+ main: main
+ }).should.match(/server\.js/)
+ })
+
+ it('should not use children[0] if no children exist', function () {
+ var main = {
+ filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js',
+ children: []
+ }
+ requireMainFilename({
+ main: main
+ }).should.match(/interceptor\.js/)
+ })
+
+ it('should default to process.cwd() if require.main is undefined', function () {
+ requireMainFilename({}).should.match(/require-main-filename/)
+ })
+})
diff --git a/node_modules/resolve-dir/LICENSE b/node_modules/resolve-dir/LICENSE
new file mode 100644
index 0000000..6525171
--- /dev/null
+++ b/node_modules/resolve-dir/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert
+
+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/node_modules/resolve-dir/README.md b/node_modules/resolve-dir/README.md
new file mode 100644
index 0000000..220178d
--- /dev/null
+++ b/node_modules/resolve-dir/README.md
@@ -0,0 +1,88 @@
+# resolve-dir [](https://www.npmjs.com/package/resolve-dir) [](https://npmjs.org/package/resolve-dir) [](https://travis-ci.org/jonschlinkert/resolve-dir)
+
+Resolve a directory that is either local, global or in the user's home directory.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save resolve-dir
+```
+
+## Usage
+
+```js
+var resolve = require('resolve-dir');
+```
+
+Returns a local directory path unchanged
+
+```js
+resolve('a')
+//=> 'a'
+```
+
+Resolves the path to user home
+
+```js
+resolve('~')
+//=> '/Users/jonschlinkert'
+resolve('~/foo')
+//=> '/Users/jonschlinkert/foo'
+```
+
+Resolves the path to global npm modules
+
+```js
+resolve('@')
+//=> '/usr/local/lib/node_modules'
+resolve('@/foo')
+//=> '/usr/local/lib/node_modules/foo'
+```
+
+## About
+
+### Related projects
+
+* [expand-tilde](https://www.npmjs.com/package/expand-tilde): Bash-like tilde expansion for node.js. Expands a leading tilde in a file path to the… [more](https://github.com/jonschlinkert/expand-tilde) | [homepage](https://github.com/jonschlinkert/expand-tilde "Bash-like tilde expansion for node.js. Expands a leading tilde in a file path to the user home directory, or `~+` to the cwd.")
+* [findup-sync](https://www.npmjs.com/package/findup-sync): Find the first file matching a given pattern in the current directory or the nearest… [more](https://github.com/cowboy/node-findup-sync) | [homepage](https://github.com/cowboy/node-findup-sync "Find the first file matching a given pattern in the current directory or the nearest ancestor directory.")
+* [resolve-modules](https://www.npmjs.com/package/resolve-modules): Resolves local and global npm modules that match specified patterns, and returns a configuration object… [more](https://github.com/jonschlinkert/resolve-modules) | [homepage](https://github.com/jonschlinkert/resolve-modules "Resolves local and global npm modules that match specified patterns, and returns a configuration object for each resolved module.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/resolve-dir/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 29, 2016._
\ No newline at end of file
diff --git a/node_modules/resolve-dir/index.js b/node_modules/resolve-dir/index.js
new file mode 100644
index 0000000..3fe5366
--- /dev/null
+++ b/node_modules/resolve-dir/index.js
@@ -0,0 +1,22 @@
+/*!
+ * resolve-dir
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var path = require('path');
+var expand = require('expand-tilde');
+var gm = require('global-modules');
+
+module.exports = function resolveDir(dir) {
+ if (dir.charAt(0) === '~') {
+ dir = expand(dir);
+ }
+ if (dir.charAt(0) === '@') {
+ dir = path.join(gm, dir.slice(1));
+ }
+ return dir;
+};
diff --git a/node_modules/resolve-dir/package.json b/node_modules/resolve-dir/package.json
new file mode 100644
index 0000000..b1f9d11
--- /dev/null
+++ b/node_modules/resolve-dir/package.json
@@ -0,0 +1,140 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "resolve-dir@^0.1.0",
+ "scope": null,
+ "escapedName": "resolve-dir",
+ "name": "resolve-dir",
+ "rawSpec": "^0.1.0",
+ "spec": ">=0.1.0 <0.2.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/findup-sync"
+ ]
+ ],
+ "_from": "resolve-dir@>=0.1.0 <0.2.0",
+ "_id": "resolve-dir@0.1.1",
+ "_inCache": true,
+ "_location": "/resolve-dir",
+ "_nodeVersion": "6.3.0",
+ "_npmOperationalInternal": {
+ "host": "packages-16-east.internal.npmjs.com",
+ "tmp": "tmp/resolve-dir-0.1.1.tgz_1469811619883_0.7320640422403812"
+ },
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "3.10.3",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "resolve-dir@^0.1.0",
+ "scope": null,
+ "escapedName": "resolve-dir",
+ "name": "resolve-dir",
+ "rawSpec": "^0.1.0",
+ "spec": ">=0.1.0 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/findup-sync"
+ ],
+ "_resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
+ "_shasum": "b219259a5602fac5c5c496ad894a6e8cc430261e",
+ "_shrinkwrap": null,
+ "_spec": "resolve-dir@^0.1.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/findup-sync",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/resolve-dir/issues"
+ },
+ "dependencies": {
+ "expand-tilde": "^1.2.2",
+ "global-modules": "^0.2.3"
+ },
+ "description": "Resolve a directory that is either local, global or in the user's home directory.",
+ "devDependencies": {
+ "gulp-format-md": "^0.1.9",
+ "mocha": "^2.5.3"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "b219259a5602fac5c5c496ad894a6e8cc430261e",
+ "tarball": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js",
+ "LICENSE",
+ "README.md"
+ ],
+ "gitHead": "a9ba6b37227d5b708c3606bc97ff62b1a679ef56",
+ "homepage": "https://github.com/jonschlinkert/resolve-dir",
+ "keywords": [
+ "dir",
+ "directory",
+ "expansion",
+ "file",
+ "filepath",
+ "fp",
+ "global",
+ "home",
+ "modules",
+ "npm",
+ "path",
+ "resolve",
+ "tilde",
+ "user",
+ "user-home",
+ "userhome"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ }
+ ],
+ "name": "resolve-dir",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/jonschlinkert/resolve-dir.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "findup-sync",
+ "expand-tilde",
+ "resolve-modules"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "version": "0.1.1"
+}
diff --git a/node_modules/resolve/.eslintignore b/node_modules/resolve/.eslintignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/node_modules/resolve/.eslintignore
@@ -0,0 +1 @@
+node_modules
diff --git a/node_modules/resolve/.eslintrc b/node_modules/resolve/.eslintrc
new file mode 100644
index 0000000..ae352e2
--- /dev/null
+++ b/node_modules/resolve/.eslintrc
@@ -0,0 +1,27 @@
+{
+ "extends": "@ljharb",
+ "root": true,
+ "rules": {
+ "indent": [2, 4],
+ "strict": 0,
+ "complexity": 0,
+ "consistent-return": 0,
+ "curly": 0,
+ "func-name-matching": 0,
+ "func-style": 0,
+ "global-require": 0,
+ "id-length": [2, { "min": 1, "max": 30 }],
+ "max-nested-callbacks": 0,
+ "max-params": 0,
+ "max-statements-per-line": [2, { "max": 2 }],
+ "max-statements": 0,
+ "no-magic-numbers": 0,
+ "no-console": 0,
+ "no-shadow": 0,
+ "no-unused-vars": [2, { "vars": "all", "args": "none" }],
+ "no-use-before-define": 0,
+ "object-curly-newline": 0,
+ "operator-linebreak": [2, "before"],
+ "sort-keys": 0,
+ }
+}
diff --git a/node_modules/resolve/.npmignore b/node_modules/resolve/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/node_modules/resolve/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/node_modules/resolve/.travis.yml b/node_modules/resolve/.travis.yml
new file mode 100644
index 0000000..f5450af
--- /dev/null
+++ b/node_modules/resolve/.travis.yml
@@ -0,0 +1,176 @@
+language: node_js
+os:
+ - linux
+node_js:
+ - "7.9"
+ - "6.10"
+ - "5.12"
+ - "4.8"
+ - "iojs-v3.3"
+ - "iojs-v2.5"
+ - "iojs-v1.8"
+ - "0.12"
+ - "0.10"
+ - "0.8"
+ - "0.6"
+before_install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
+ - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then npm install -g npm; fi'
+install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+script:
+ - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
+ - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
+ - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
+ - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
+sudo: false
+env:
+ - TEST=true
+matrix:
+ fast_finish: true
+ include:
+ - node_js: "node"
+ env: PRETEST=true
+ - node_js: "7.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.4"
+ env: TEST=true ALLOW_FAILURE=true
+ ##- node_js: "7"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "6"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "5"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "4"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "iojs"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "0.12"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "0.10"
+ #env: TEST=true
+ #os: osx
+ #- node_js: "0.8"
+ #env: TEST=true
+ #os: osx
+ allow_failures:
+ - os: osx
+ - env: TEST=true ALLOW_FAILURE=true
diff --git a/node_modules/resolve/LICENSE b/node_modules/resolve/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/resolve/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/node_modules/resolve/appveyor.yml b/node_modules/resolve/appveyor.yml
new file mode 100644
index 0000000..f54a1b6
--- /dev/null
+++ b/node_modules/resolve/appveyor.yml
@@ -0,0 +1,44 @@
+version: 1.0.{build}
+skip_branch_with_pr: true
+build: off
+
+environment:
+ matrix:
+ - nodejs_version: "7"
+ - nodejs_version: "6"
+ - nodejs_version: "5"
+ - nodejs_version: "4"
+ - nodejs_version: "3"
+ - nodejs_version: "2"
+ - nodejs_version: "1"
+ - nodejs_version: "0.12"
+ - nodejs_version: "0.10"
+ - nodejs_version: "0.8"
+ - nodejs_version: "0.6"
+matrix:
+ # fast_finish: true
+ allow_failures:
+ - nodejs_version: "0.6"
+
+platform:
+ - x86
+ - x64
+
+# Install scripts. (runs after repo cloning)
+install:
+ # Get the latest stable version of Node.js or io.js
+ - ps: Install-Product node $env:nodejs_version $env:platform
+ - IF %nodejs_version% EQU 0.6 npm -g install npm@1.3
+ - IF %nodejs_version% EQU 0.8 npm -g install npm@2
+ - set PATH=%APPDATA%\npm;%PATH%
+ #- IF %nodejs_version% NEQ 0.6 AND %nodejs_version% NEQ 0.8 npm -g install npm
+ # install modules
+ - npm install
+
+# Post-install test scripts.
+test_script:
+ # Output useful info for debugging.
+ - node --version
+ - npm --version
+ # run tests
+ - npm run tests-only
diff --git a/node_modules/resolve/example/async.js b/node_modules/resolve/example/async.js
new file mode 100644
index 0000000..20e65dc
--- /dev/null
+++ b/node_modules/resolve/example/async.js
@@ -0,0 +1,5 @@
+var resolve = require('../');
+resolve('tap', { basedir: __dirname }, function (err, res) {
+ if (err) console.error(err);
+ else console.log(res);
+});
diff --git a/node_modules/resolve/example/sync.js b/node_modules/resolve/example/sync.js
new file mode 100644
index 0000000..54b2cc1
--- /dev/null
+++ b/node_modules/resolve/example/sync.js
@@ -0,0 +1,3 @@
+var resolve = require('../');
+var res = resolve.sync('tap', { basedir: __dirname });
+console.log(res);
diff --git a/node_modules/resolve/index.js b/node_modules/resolve/index.js
new file mode 100644
index 0000000..eb6ba89
--- /dev/null
+++ b/node_modules/resolve/index.js
@@ -0,0 +1,8 @@
+var core = require('./lib/core');
+var async = require('./lib/async');
+async.core = core;
+async.isCore = function isCore(x) { return core[x]; };
+async.sync = require('./lib/sync');
+
+exports = async;
+module.exports = async;
diff --git a/node_modules/resolve/lib/async.js b/node_modules/resolve/lib/async.js
new file mode 100644
index 0000000..ef1bde7
--- /dev/null
+++ b/node_modules/resolve/lib/async.js
@@ -0,0 +1,203 @@
+var core = require('./core');
+var fs = require('fs');
+var path = require('path');
+var caller = require('./caller.js');
+var nodeModulesPaths = require('./node-modules-paths.js');
+
+module.exports = function resolve(x, options, callback) {
+ var cb = callback;
+ var opts = options || {};
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = {};
+ }
+ if (typeof x !== 'string') {
+ var err = new TypeError('Path must be a string.');
+ return process.nextTick(function () {
+ cb(err);
+ });
+ }
+
+ var isFile = opts.isFile || function (file, cb) {
+ fs.stat(file, function (err, stat) {
+ if (!err) {
+ return cb(null, stat.isFile() || stat.isFIFO());
+ }
+ if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false);
+ return cb(err);
+ });
+ };
+ var readFile = opts.readFile || fs.readFile;
+
+ var extensions = opts.extensions || ['.js'];
+ var y = opts.basedir || path.dirname(caller());
+
+ opts.paths = opts.paths || [];
+
+ if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) {
+ var res = path.resolve(y, x);
+ if (x === '..' || x.slice(-1) === '/') res += '/';
+ if (/\/$/.test(x) && res === y) {
+ loadAsDirectory(res, opts.package, onfile);
+ } else loadAsFile(res, opts.package, onfile);
+ } else loadNodeModules(x, y, function (err, n, pkg) {
+ if (err) cb(err);
+ else if (n) cb(null, n, pkg);
+ else if (core[x]) return cb(null, x);
+ else {
+ var moduleError = new Error("Cannot find module '" + x + "' from '" + y + "'");
+ moduleError.code = 'MODULE_NOT_FOUND';
+ cb(moduleError);
+ }
+ });
+
+ function onfile(err, m, pkg) {
+ if (err) cb(err);
+ else if (m) cb(null, m, pkg);
+ else loadAsDirectory(res, function (err, d, pkg) {
+ if (err) cb(err);
+ else if (d) cb(null, d, pkg);
+ else {
+ var moduleError = new Error("Cannot find module '" + x + "' from '" + y + "'");
+ moduleError.code = 'MODULE_NOT_FOUND';
+ cb(moduleError);
+ }
+ });
+ }
+
+ function loadAsFile(x, thePackage, callback) {
+ var loadAsFilePackage = thePackage;
+ var cb = callback;
+ if (typeof loadAsFilePackage === 'function') {
+ cb = loadAsFilePackage;
+ loadAsFilePackage = undefined;
+ }
+
+ var exts = [''].concat(extensions);
+ load(exts, x, loadAsFilePackage);
+
+ function load(exts, x, loadPackage) {
+ if (exts.length === 0) return cb(null, undefined, loadPackage);
+ var file = x + exts[0];
+
+ var pkg = loadPackage;
+ if (pkg) onpkg(null, pkg);
+ else loadpkg(path.dirname(file), onpkg);
+
+ function onpkg(err, pkg_, dir) {
+ pkg = pkg_;
+ if (err) return cb(err);
+ if (dir && pkg && opts.pathFilter) {
+ var rfile = path.relative(dir, file);
+ var rel = rfile.slice(0, rfile.length - exts[0].length);
+ var r = opts.pathFilter(pkg, x, rel);
+ if (r) return load(
+ [''].concat(extensions.slice()),
+ path.resolve(dir, r),
+ pkg
+ );
+ }
+ isFile(file, onex);
+ }
+ function onex(err, ex) {
+ if (err) return cb(err);
+ if (ex) return cb(null, file, pkg);
+ load(exts.slice(1), x, pkg);
+ }
+ }
+ }
+
+ function loadpkg(dir, cb) {
+ if (dir === '' || dir === '/') return cb(null);
+ if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
+ return cb(null);
+ }
+ if (/[/\\]node_modules[/\\]*$/.test(dir)) return cb(null);
+
+ var pkgfile = path.join(dir, 'package.json');
+ isFile(pkgfile, function (err, ex) {
+ // on err, ex is false
+ if (!ex) return loadpkg(path.dirname(dir), cb);
+
+ readFile(pkgfile, function (err, body) {
+ if (err) cb(err);
+ try { var pkg = JSON.parse(body); } catch (jsonErr) {}
+
+ if (pkg && opts.packageFilter) {
+ pkg = opts.packageFilter(pkg, pkgfile);
+ }
+ cb(null, pkg, dir);
+ });
+ });
+ }
+
+ function loadAsDirectory(x, loadAsDirectoryPackage, callback) {
+ var cb = callback;
+ var fpkg = loadAsDirectoryPackage;
+ if (typeof fpkg === 'function') {
+ cb = fpkg;
+ fpkg = opts.package;
+ }
+
+ var pkgfile = path.join(x, 'package.json');
+ isFile(pkgfile, function (err, ex) {
+ if (err) return cb(err);
+ if (!ex) return loadAsFile(path.join(x, 'index'), fpkg, cb);
+
+ readFile(pkgfile, function (err, body) {
+ if (err) return cb(err);
+ try {
+ var pkg = JSON.parse(body);
+ } catch (jsonErr) {}
+
+ if (opts.packageFilter) {
+ pkg = opts.packageFilter(pkg, pkgfile);
+ }
+
+ if (pkg.main) {
+ if (pkg.main === '.' || pkg.main === './') {
+ pkg.main = 'index';
+ }
+ loadAsFile(path.resolve(x, pkg.main), pkg, function (err, m, pkg) {
+ if (err) return cb(err);
+ if (m) return cb(null, m, pkg);
+ if (!pkg) return loadAsFile(path.join(x, 'index'), pkg, cb);
+
+ var dir = path.resolve(x, pkg.main);
+ loadAsDirectory(dir, pkg, function (err, n, pkg) {
+ if (err) return cb(err);
+ if (n) return cb(null, n, pkg);
+ loadAsFile(path.join(x, 'index'), pkg, cb);
+ });
+ });
+ return;
+ }
+
+ loadAsFile(path.join(x, '/index'), pkg, cb);
+ });
+ });
+ }
+
+ function processDirs(cb, dirs) {
+ if (dirs.length === 0) return cb(null, undefined);
+ var dir = dirs[0];
+
+ var file = path.join(dir, x);
+ loadAsFile(file, undefined, onfile);
+
+ function onfile(err, m, pkg) {
+ if (err) return cb(err);
+ if (m) return cb(null, m, pkg);
+ loadAsDirectory(path.join(dir, x), undefined, ondir);
+ }
+
+ function ondir(err, n, pkg) {
+ if (err) return cb(err);
+ if (n) return cb(null, n, pkg);
+ processDirs(cb, dirs.slice(1));
+ }
+ }
+ function loadNodeModules(x, start, cb) {
+ processDirs(cb, nodeModulesPaths(start, opts));
+ }
+};
diff --git a/node_modules/resolve/lib/caller.js b/node_modules/resolve/lib/caller.js
new file mode 100644
index 0000000..b14a280
--- /dev/null
+++ b/node_modules/resolve/lib/caller.js
@@ -0,0 +1,8 @@
+module.exports = function () {
+ // see https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
+ var origPrepareStackTrace = Error.prepareStackTrace;
+ Error.prepareStackTrace = function (_, stack) { return stack; };
+ var stack = (new Error()).stack;
+ Error.prepareStackTrace = origPrepareStackTrace;
+ return stack[2].getFileName();
+};
diff --git a/node_modules/resolve/lib/core.js b/node_modules/resolve/lib/core.js
new file mode 100644
index 0000000..ad9efd1
--- /dev/null
+++ b/node_modules/resolve/lib/core.js
@@ -0,0 +1,22 @@
+var current = (process.versions && process.versions.node && process.versions.node.split('.')) || [];
+
+function versionIncluded(version) {
+ if (version === '*') return true;
+ var versionParts = version.split('.');
+ for (var i = 0; i < 3; ++i) {
+ if ((current[i] || 0) >= (versionParts[i] || 0)) return true;
+ }
+ return false;
+}
+
+var data = require('./core.json');
+
+var core = {};
+for (var version in data) { // eslint-disable-line no-restricted-syntax
+ if (Object.prototype.hasOwnProperty.call(data, version) && versionIncluded(version)) {
+ for (var i = 0; i < data[version].length; ++i) {
+ core[data[version][i]] = true;
+ }
+ }
+}
+module.exports = core;
diff --git a/node_modules/resolve/lib/core.json b/node_modules/resolve/lib/core.json
new file mode 100644
index 0000000..843844e
--- /dev/null
+++ b/node_modules/resolve/lib/core.json
@@ -0,0 +1,47 @@
+{
+ "*": [
+ "assert",
+ "buffer_ieee754",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "_debugger",
+ "dgram",
+ "dns",
+ "domain",
+ "events",
+ "freelist",
+ "fs",
+ "http",
+ "https",
+ "_linklist",
+ "module",
+ "net",
+ "os",
+ "path",
+ "punycode",
+ "querystring",
+ "readline",
+ "repl",
+ "stream",
+ "string_decoder",
+ "sys",
+ "timers",
+ "tls",
+ "tty",
+ "url",
+ "util",
+ "vm",
+ "zlib"
+ ],
+ "0.11": [
+ "_http_server"
+ ],
+ "1.0": [
+ "process",
+ "v8"
+ ]
+}
diff --git a/node_modules/resolve/lib/node-modules-paths.js b/node_modules/resolve/lib/node-modules-paths.js
new file mode 100644
index 0000000..dc06199
--- /dev/null
+++ b/node_modules/resolve/lib/node-modules-paths.js
@@ -0,0 +1,35 @@
+var path = require('path');
+var parse = path.parse || require('path-parse');
+
+module.exports = function nodeModulesPaths(start, opts) {
+ var modules = opts && opts.moduleDirectory
+ ? [].concat(opts.moduleDirectory)
+ : ['node_modules']
+ ;
+
+ // ensure that `start` is an absolute path at this point,
+ // resolving against the process' current working directory
+ var absoluteStart = path.resolve(start);
+
+ var prefix = '/';
+ if (/^([A-Za-z]:)/.test(absoluteStart)) {
+ prefix = '';
+ } else if (/^\\\\/.test(absoluteStart)) {
+ prefix = '\\\\';
+ }
+
+ var paths = [absoluteStart];
+ var parsed = parse(absoluteStart);
+ while (parsed.dir !== paths[paths.length - 1]) {
+ paths.push(parsed.dir);
+ parsed = parse(parsed.dir);
+ }
+
+ var dirs = paths.reduce(function (dirs, aPath) {
+ return dirs.concat(modules.map(function (moduleDir) {
+ return path.join(prefix, aPath, moduleDir);
+ }));
+ }, []);
+
+ return opts && opts.paths ? dirs.concat(opts.paths) : dirs;
+};
diff --git a/node_modules/resolve/lib/sync.js b/node_modules/resolve/lib/sync.js
new file mode 100644
index 0000000..510ca25
--- /dev/null
+++ b/node_modules/resolve/lib/sync.js
@@ -0,0 +1,89 @@
+var core = require('./core');
+var fs = require('fs');
+var path = require('path');
+var caller = require('./caller.js');
+var nodeModulesPaths = require('./node-modules-paths.js');
+
+module.exports = function (x, options) {
+ if (typeof x !== 'string') {
+ throw new TypeError('Path must be a string.');
+ }
+ var opts = options || {};
+ var isFile = opts.isFile || function (file) {
+ try {
+ var stat = fs.statSync(file);
+ } catch (e) {
+ if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
+ throw e;
+ }
+ return stat.isFile() || stat.isFIFO();
+ };
+ var readFileSync = opts.readFileSync || fs.readFileSync;
+
+ var extensions = opts.extensions || ['.js'];
+ var y = opts.basedir || path.dirname(caller());
+
+ opts.paths = opts.paths || [];
+
+ if (/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/.test(x)) {
+ var res = path.resolve(y, x);
+ if (x === '..' || x.slice(-1) === '/') res += '/';
+ var m = loadAsFileSync(res) || loadAsDirectorySync(res);
+ if (m) return m;
+ } else {
+ var n = loadNodeModulesSync(x, y);
+ if (n) return n;
+ }
+
+ if (core[x]) return x;
+
+ var err = new Error("Cannot find module '" + x + "' from '" + y + "'");
+ err.code = 'MODULE_NOT_FOUND';
+ throw err;
+
+ function loadAsFileSync(x) {
+ if (isFile(x)) {
+ return x;
+ }
+
+ for (var i = 0; i < extensions.length; i++) {
+ var file = x + extensions[i];
+ if (isFile(file)) {
+ return file;
+ }
+ }
+ }
+
+ function loadAsDirectorySync(x) {
+ var pkgfile = path.join(x, '/package.json');
+ if (isFile(pkgfile)) {
+ var body = readFileSync(pkgfile, 'utf8');
+ try {
+ var pkg = JSON.parse(body);
+ if (opts.packageFilter) {
+ pkg = opts.packageFilter(pkg, x);
+ }
+
+ if (pkg.main) {
+ var m = loadAsFileSync(path.resolve(x, pkg.main));
+ if (m) return m;
+ var n = loadAsDirectorySync(path.resolve(x, pkg.main));
+ if (n) return n;
+ }
+ } catch (e) {}
+ }
+
+ return loadAsFileSync(path.join(x, '/index'));
+ }
+
+ function loadNodeModulesSync(x, start) {
+ var dirs = nodeModulesPaths(start, opts);
+ for (var i = 0; i < dirs.length; i++) {
+ var dir = dirs[i];
+ var m = loadAsFileSync(path.join(dir, '/', x));
+ if (m) return m;
+ var n = loadAsDirectorySync(path.join(dir, '/', x));
+ if (n) return n;
+ }
+ }
+};
diff --git a/node_modules/resolve/package.json b/node_modules/resolve/package.json
new file mode 100644
index 0000000..8db3b8e
--- /dev/null
+++ b/node_modules/resolve/package.json
@@ -0,0 +1,111 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "resolve@^1.3.2",
+ "scope": null,
+ "escapedName": "resolve",
+ "name": "resolve",
+ "rawSpec": "^1.3.2",
+ "spec": ">=1.3.2 <2.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli"
+ ]
+ ],
+ "_from": "resolve@>=1.3.2 <2.0.0",
+ "_id": "resolve@1.3.3",
+ "_inCache": true,
+ "_location": "/resolve",
+ "_nodeVersion": "7.9.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/resolve-1.3.3.tgz_1492668562208_0.1827435742598027"
+ },
+ "_npmUser": {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ },
+ "_npmVersion": "4.2.0",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "resolve@^1.3.2",
+ "scope": null,
+ "escapedName": "resolve",
+ "name": "resolve",
+ "rawSpec": "^1.3.2",
+ "spec": ">=1.3.2 <2.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/liftoff",
+ "/rechoir",
+ "/sequelize-cli",
+ "/umzug"
+ ],
+ "_resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz",
+ "_shasum": "655907c3469a8680dc2de3a275a8fdd69691f0e5",
+ "_shrinkwrap": null,
+ "_spec": "resolve@^1.3.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize-cli",
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "bugs": {
+ "url": "https://github.com/substack/node-resolve/issues"
+ },
+ "dependencies": {
+ "path-parse": "^1.0.5"
+ },
+ "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^11.0.0",
+ "eslint": "^3.19.0",
+ "object-keys": "^1.0.11",
+ "safe-publish-latest": "^1.1.1",
+ "tap": "0.4.13",
+ "tape": "^4.6.3"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "655907c3469a8680dc2de3a275a8fdd69691f0e5",
+ "tarball": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz"
+ },
+ "gitHead": "f0098226a4fd0dedc85b5f1e8ca8aac6a7ca7a60",
+ "homepage": "https://github.com/substack/node-resolve#readme",
+ "keywords": [
+ "resolve",
+ "require",
+ "node",
+ "module"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "ljharb",
+ "email": "ljharb@gmail.com"
+ },
+ {
+ "name": "substack",
+ "email": "substack@gmail.com"
+ }
+ ],
+ "name": "resolve",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/node-resolve.git"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "prepublish": "safe-publish-latest",
+ "pretest": "npm run lint",
+ "test": "npm run --silent tests-only",
+ "tests-only": "tape test/*.js"
+ },
+ "version": "1.3.3"
+}
diff --git a/node_modules/resolve/readme.markdown b/node_modules/resolve/readme.markdown
new file mode 100644
index 0000000..db0d69f
--- /dev/null
+++ b/node_modules/resolve/readme.markdown
@@ -0,0 +1,148 @@
+# resolve
+
+implements the [node `require.resolve()`
+algorithm](https://nodejs.org/api/modules.html#modules_all_together)
+such that you can `require.resolve()` on behalf of a file asynchronously and
+synchronously
+
+[](http://travis-ci.org/substack/node-resolve)
+
+# example
+
+asynchronously resolve:
+
+``` js
+var resolve = require('resolve');
+resolve('tap', { basedir: __dirname }, function (err, res) {
+ if (err) console.error(err)
+ else console.log(res)
+});
+```
+
+```
+$ node example/async.js
+/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
+```
+
+synchronously resolve:
+
+``` js
+var resolve = require('resolve');
+var res = resolve.sync('tap', { basedir: __dirname });
+console.log(res);
+```
+
+```
+$ node example/sync.js
+/home/substack/projects/node-resolve/node_modules/tap/lib/main.js
+```
+
+# methods
+
+``` js
+var resolve = require('resolve')
+```
+
+## resolve(id, opts={}, cb)
+
+Asynchronously resolve the module path string `id` into `cb(err, res [, pkg])`, where `pkg` (if defined) is the data from `package.json`.
+
+options are:
+
+* opts.basedir - directory to begin resolving from
+
+* opts.package - `package.json` data applicable to the module being loaded
+
+* opts.extensions - array of file extensions to search in order
+
+* opts.readFile - how to read files asynchronously
+
+* opts.isFile - function to asynchronously test whether a file exists
+
+* opts.packageFilter - transform the parsed package.json contents before looking
+at the "main" field
+
+* opts.pathFilter(pkg, path, relativePath) - transform a path within a package
+ * pkg - package data
+ * path - the path being resolved
+ * relativePath - the path relative from the package.json location
+ * returns - a relative path that will be joined from the package.json location
+
+* opts.paths - require.paths array to use if nothing is found on the normal
+node_modules recursive walk (probably don't use this)
+
+* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"`
+
+default `opts` values:
+
+``` javascript
+{
+ paths: [],
+ basedir: __dirname,
+ extensions: [ '.js' ],
+ readFile: fs.readFile,
+ isFile: function (file, cb) {
+ fs.stat(file, function (err, stat) {
+ if (err && err.code === 'ENOENT') cb(null, false)
+ else if (err) cb(err)
+ else cb(null, stat.isFile())
+ });
+ },
+ moduleDirectory: 'node_modules'
+}
+```
+
+## resolve.sync(id, opts)
+
+Synchronously resolve the module path string `id`, returning the result and
+throwing an error when `id` can't be resolved.
+
+options are:
+
+* opts.basedir - directory to begin resolving from
+
+* opts.extensions - array of file extensions to search in order
+
+* opts.readFile - how to read files synchronously
+
+* opts.isFile - function to synchronously test whether a file exists
+
+* `opts.packageFilter(pkg, pkgfile)` - transform the parsed package.json
+* contents before looking at the "main" field
+
+* opts.paths - require.paths array to use if nothing is found on the normal
+node_modules recursive walk (probably don't use this)
+
+* opts.moduleDirectory - directory (or directories) in which to recursively look for modules. default: `"node_modules"`
+
+default `opts` values:
+
+``` javascript
+{
+ paths: [],
+ basedir: __dirname,
+ extensions: [ '.js' ],
+ readFileSync: fs.readFileSync,
+ isFile: function (file) {
+ try { return fs.statSync(file).isFile() }
+ catch (e) { return false }
+ },
+ moduleDirectory: 'node_modules'
+}
+````
+
+## resolve.isCore(pkg)
+
+Return whether a package is in core.
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install resolve
+```
+
+# license
+
+MIT
diff --git a/node_modules/resolve/test/core.js b/node_modules/resolve/test/core.js
new file mode 100644
index 0000000..1182e0c
--- /dev/null
+++ b/node_modules/resolve/test/core.js
@@ -0,0 +1,29 @@
+var test = require('tape');
+var resolve = require('../');
+
+test('core modules', function (t) {
+ t.test('isCore()', function (st) {
+ st.ok(resolve.isCore('fs'));
+ st.ok(resolve.isCore('net'));
+ st.ok(resolve.isCore('http'));
+
+ st.ok(!resolve.isCore('seq'));
+ st.ok(!resolve.isCore('../'));
+ st.end();
+ });
+
+ t.test('core list', function (st) {
+ st.plan(resolve.core.length);
+
+ for (var i = 0; i < resolve.core.length; ++i) {
+ st.doesNotThrow(
+ function () { require(resolve.core[i]); }, // eslint-disable-line no-loop-func
+ 'requiring ' + resolve.core[i] + ' does not throw'
+ );
+ }
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/resolve/test/dotdot.js b/node_modules/resolve/test/dotdot.js
new file mode 100644
index 0000000..3080665
--- /dev/null
+++ b/node_modules/resolve/test/dotdot.js
@@ -0,0 +1,29 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('dotdot', function (t) {
+ t.plan(4);
+ var dir = path.join(__dirname, '/dotdot/abc');
+
+ resolve('..', { basedir: dir }, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(__dirname, 'dotdot/index.js'));
+ });
+
+ resolve('.', { basedir: dir }, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, 'index.js'));
+ });
+});
+
+test('dotdot sync', function (t) {
+ t.plan(2);
+ var dir = path.join(__dirname, '/dotdot/abc');
+
+ var a = resolve.sync('..', { basedir: dir });
+ t.equal(a, path.join(__dirname, 'dotdot/index.js'));
+
+ var b = resolve.sync('.', { basedir: dir });
+ t.equal(b, path.join(dir, 'index.js'));
+});
diff --git a/node_modules/resolve/test/dotdot/abc/index.js b/node_modules/resolve/test/dotdot/abc/index.js
new file mode 100644
index 0000000..67f2534
--- /dev/null
+++ b/node_modules/resolve/test/dotdot/abc/index.js
@@ -0,0 +1,2 @@
+var x = require('..');
+console.log(x);
diff --git a/node_modules/resolve/test/dotdot/index.js b/node_modules/resolve/test/dotdot/index.js
new file mode 100644
index 0000000..643f9fc
--- /dev/null
+++ b/node_modules/resolve/test/dotdot/index.js
@@ -0,0 +1 @@
+module.exports = 'whatever';
diff --git a/node_modules/resolve/test/faulty_basedir.js b/node_modules/resolve/test/faulty_basedir.js
new file mode 100644
index 0000000..e20d937
--- /dev/null
+++ b/node_modules/resolve/test/faulty_basedir.js
@@ -0,0 +1,13 @@
+var test = require('tape');
+var resolve = require('../');
+
+test('faulty basedir must produce error in windows', { skip: process.platform !== 'win32' }, function (t) {
+ t.plan(1);
+
+ var resolverDir = 'C:\\a\\b\\c\\d';
+
+ resolve('tape/lib/test.js', { basedir: resolverDir }, function (err, res, pkg) {
+ t.equal(true, !!err);
+ });
+
+});
diff --git a/node_modules/resolve/test/filter.js b/node_modules/resolve/test/filter.js
new file mode 100644
index 0000000..51a753f
--- /dev/null
+++ b/node_modules/resolve/test/filter.js
@@ -0,0 +1,19 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('filter', function (t) {
+ t.plan(2);
+ var dir = path.join(__dirname, 'resolver');
+ resolve('./baz', {
+ basedir: dir,
+ packageFilter: function (pkg) {
+ pkg.main = 'doom';
+ return pkg;
+ }
+ }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'baz/doom.js'));
+ t.equal(pkg.main, 'doom');
+ });
+});
diff --git a/node_modules/resolve/test/filter_sync.js b/node_modules/resolve/test/filter_sync.js
new file mode 100644
index 0000000..fd4e97c
--- /dev/null
+++ b/node_modules/resolve/test/filter_sync.js
@@ -0,0 +1,16 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('filter', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+ var res = resolve.sync('./baz', {
+ basedir: dir,
+ packageFilter: function (pkg) {
+ pkg.main = 'doom';
+ return pkg;
+ }
+ });
+ t.equal(res, path.join(dir, 'baz/doom.js'));
+ t.end();
+});
diff --git a/node_modules/resolve/test/mock.js b/node_modules/resolve/test/mock.js
new file mode 100644
index 0000000..a88059d
--- /dev/null
+++ b/node_modules/resolve/test/mock.js
@@ -0,0 +1,143 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('mock', function (t) {
+ t.plan(8);
+
+ var files = {};
+ files[path.resolve('/foo/bar/baz.js')] = 'beep';
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file, cb) {
+ cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
+ },
+ readFile: function (file, cb) {
+ cb(null, files[path.resolve(file)]);
+ }
+ };
+ }
+
+ resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/bar/baz.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/bar/baz.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('baz', opts('/foo/bar'), function (err, res) {
+ t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+
+ resolve('../baz', opts('/foo/bar'), function (err, res) {
+ t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+});
+
+test('mock from package', function (t) {
+ t.plan(8);
+
+ var files = {};
+ files[path.resolve('/foo/bar/baz.js')] = 'beep';
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file, cb) {
+ cb(null, Object.prototype.hasOwnProperty.call(files, file));
+ },
+ 'package': { main: 'bar' },
+ readFile: function (file, cb) {
+ cb(null, files[file]);
+ }
+ };
+ }
+
+ resolve('./baz', opts('/foo/bar'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/bar/baz.js'));
+ t.equal(pkg && pkg.main, 'bar');
+ });
+
+ resolve('./baz.js', opts('/foo/bar'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/bar/baz.js'));
+ t.equal(pkg && pkg.main, 'bar');
+ });
+
+ resolve('baz', opts('/foo/bar'), function (err, res) {
+ t.equal(err.message, "Cannot find module 'baz' from '" + path.resolve('/foo/bar') + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+
+ resolve('../baz', opts('/foo/bar'), function (err, res) {
+ t.equal(err.message, "Cannot find module '../baz' from '" + path.resolve('/foo/bar') + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+});
+
+test('mock package', function (t) {
+ t.plan(2);
+
+ var files = {};
+ files[path.resolve('/foo/node_modules/bar/baz.js')] = 'beep';
+ files[path.resolve('/foo/node_modules/bar/package.json')] = JSON.stringify({
+ main: './baz.js'
+ });
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file, cb) {
+ cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
+ },
+ readFile: function (file, cb) {
+ cb(null, files[path.resolve(file)]);
+ }
+ };
+ }
+
+ resolve('bar', opts('/foo'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/node_modules/bar/baz.js'));
+ t.equal(pkg && pkg.main, './baz.js');
+ });
+});
+
+test('mock package from package', function (t) {
+ t.plan(2);
+
+ var files = {};
+ files[path.resolve('/foo/node_modules/bar/baz.js')] = 'beep';
+ files[path.resolve('/foo/node_modules/bar/package.json')] = JSON.stringify({
+ main: './baz.js'
+ });
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file, cb) {
+ cb(null, Object.prototype.hasOwnProperty.call(files, path.resolve(file)));
+ },
+ 'package': { main: 'bar' },
+ readFile: function (file, cb) {
+ cb(null, files[path.resolve(file)]);
+ }
+ };
+ }
+
+ resolve('bar', opts('/foo'), function (err, res, pkg) {
+ if (err) return t.fail(err);
+ t.equal(res, path.resolve('/foo/node_modules/bar/baz.js'));
+ t.equal(pkg && pkg.main, './baz.js');
+ });
+});
diff --git a/node_modules/resolve/test/mock_sync.js b/node_modules/resolve/test/mock_sync.js
new file mode 100644
index 0000000..43af102
--- /dev/null
+++ b/node_modules/resolve/test/mock_sync.js
@@ -0,0 +1,67 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('mock', function (t) {
+ t.plan(4);
+
+ var files = {};
+ files[path.resolve('/foo/bar/baz.js')] = 'beep';
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file) {
+ return Object.prototype.hasOwnProperty.call(files, file);
+ },
+ readFileSync: function (file) {
+ return files[file];
+ }
+ };
+ }
+
+ t.equal(
+ resolve.sync('./baz', opts('/foo/bar')),
+ path.resolve('/foo/bar/baz.js')
+ );
+
+ t.equal(
+ resolve.sync('./baz.js', opts('/foo/bar')),
+ path.resolve('/foo/bar/baz.js')
+ );
+
+ t.throws(function () {
+ resolve.sync('baz', opts('/foo/bar'));
+ });
+
+ t.throws(function () {
+ resolve.sync('../baz', opts('/foo/bar'));
+ });
+});
+
+test('mock package', function (t) {
+ t.plan(1);
+
+ var files = {};
+ files[path.resolve('/foo/node_modules/bar/baz.js')] = 'beep';
+ files[path.resolve('/foo/node_modules/bar/package.json')] = JSON.stringify({
+ main: './baz.js'
+ });
+
+ function opts(basedir) {
+ return {
+ basedir: path.resolve(basedir),
+ isFile: function (file) {
+ return Object.prototype.hasOwnProperty.call(files, file);
+ },
+ readFileSync: function (file) {
+ return files[file];
+ }
+ };
+ }
+
+ t.equal(
+ resolve.sync('bar', opts('/foo')),
+ path.resolve('/foo/node_modules/bar/baz.js')
+ );
+});
diff --git a/node_modules/resolve/test/module_dir.js b/node_modules/resolve/test/module_dir.js
new file mode 100644
index 0000000..b50e5bb
--- /dev/null
+++ b/node_modules/resolve/test/module_dir.js
@@ -0,0 +1,56 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('moduleDirectory strings', function (t) {
+ t.plan(4);
+ var dir = path.join(__dirname, 'module_dir');
+ var xopts = {
+ basedir: dir,
+ moduleDirectory: 'xmodules'
+ };
+ resolve('aaa', xopts, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, '/xmodules/aaa/index.js'));
+ });
+
+ var yopts = {
+ basedir: dir,
+ moduleDirectory: 'ymodules'
+ };
+ resolve('aaa', yopts, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, '/ymodules/aaa/index.js'));
+ });
+});
+
+test('moduleDirectory array', function (t) {
+ t.plan(6);
+ var dir = path.join(__dirname, 'module_dir');
+ var aopts = {
+ basedir: dir,
+ moduleDirectory: ['xmodules', 'ymodules', 'zmodules']
+ };
+ resolve('aaa', aopts, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, '/xmodules/aaa/index.js'));
+ });
+
+ var bopts = {
+ basedir: dir,
+ moduleDirectory: ['zmodules', 'ymodules', 'xmodules']
+ };
+ resolve('aaa', bopts, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, '/ymodules/aaa/index.js'));
+ });
+
+ var copts = {
+ basedir: dir,
+ moduleDirectory: ['xmodules', 'ymodules', 'zmodules']
+ };
+ resolve('bbb', copts, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, '/zmodules/bbb/main.js'));
+ });
+});
diff --git a/node_modules/resolve/test/module_dir/xmodules/aaa/index.js b/node_modules/resolve/test/module_dir/xmodules/aaa/index.js
new file mode 100644
index 0000000..dd7cf7b
--- /dev/null
+++ b/node_modules/resolve/test/module_dir/xmodules/aaa/index.js
@@ -0,0 +1 @@
+module.exports = function (x) { return x * 100; };
diff --git a/node_modules/resolve/test/module_dir/ymodules/aaa/index.js b/node_modules/resolve/test/module_dir/ymodules/aaa/index.js
new file mode 100644
index 0000000..ef2d4d4
--- /dev/null
+++ b/node_modules/resolve/test/module_dir/ymodules/aaa/index.js
@@ -0,0 +1 @@
+module.exports = function (x) { return x + 100; };
diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/main.js b/node_modules/resolve/test/module_dir/zmodules/bbb/main.js
new file mode 100644
index 0000000..e8ba629
--- /dev/null
+++ b/node_modules/resolve/test/module_dir/zmodules/bbb/main.js
@@ -0,0 +1 @@
+module.exports = function (n) { return n * 111; };
diff --git a/node_modules/resolve/test/module_dir/zmodules/bbb/package.json b/node_modules/resolve/test/module_dir/zmodules/bbb/package.json
new file mode 100644
index 0000000..c13b8cf
--- /dev/null
+++ b/node_modules/resolve/test/module_dir/zmodules/bbb/package.json
@@ -0,0 +1,3 @@
+{
+ "main": "main.js"
+}
diff --git a/node_modules/resolve/test/node-modules-paths.js b/node_modules/resolve/test/node-modules-paths.js
new file mode 100644
index 0000000..a917f06
--- /dev/null
+++ b/node_modules/resolve/test/node-modules-paths.js
@@ -0,0 +1,93 @@
+var test = require('tape');
+var path = require('path');
+var parse = path.parse || require('path-parse');
+var keys = require('object-keys');
+
+var nodeModulesPaths = require('../lib/node-modules-paths');
+
+var verifyDirs = function verifyDirs(t, start, dirs, moduleDirectories, paths) {
+ var moduleDirs = [].concat(moduleDirectories || 'node_modules');
+
+ var foundModuleDirs = {};
+ var uniqueDirs = {};
+ var parsedDirs = {};
+ for (var i = 0; i < dirs.length; ++i) {
+ var parsed = parse(dirs[i]);
+ if (!foundModuleDirs[parsed.base]) { foundModuleDirs[parsed.base] = 0; }
+ foundModuleDirs[parsed.base] += 1;
+ parsedDirs[parsed.dir] = true;
+ uniqueDirs[dirs[i]] = true;
+ }
+ t.equal(keys(parsedDirs).length >= start.split(path.sep).length, true, 'there are >= dirs than "start" has');
+ var foundModuleDirNames = keys(foundModuleDirs);
+ t.deepEqual(foundModuleDirNames, moduleDirs.concat(paths || []), 'all desired module dirs were found');
+ t.equal(keys(uniqueDirs).length, dirs.length, 'all dirs provided were unique');
+
+ var counts = {};
+ for (var j = 0; j < foundModuleDirNames.length; ++j) {
+ counts[foundModuleDirs[j]] = true;
+ }
+ t.equal(keys(counts).length, 1, 'all found module directories had the same count');
+};
+
+test('node-modules-paths', function (t) {
+ t.test('no options', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var dirs = nodeModulesPaths(start);
+
+ verifyDirs(t, start, dirs);
+
+ t.end();
+ });
+
+ t.test('empty options', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var dirs = nodeModulesPaths(start, {});
+
+ verifyDirs(t, start, dirs);
+
+ t.end();
+ });
+
+ t.test('with paths option', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var paths = ['a', 'b'];
+ var dirs = nodeModulesPaths(start, { paths: paths });
+
+ verifyDirs(t, start, dirs, null, paths);
+
+ t.end();
+ });
+
+ t.test('with moduleDirectory option', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var moduleDirectory = 'not node modules';
+ var dirs = nodeModulesPaths(start, { moduleDirectory: moduleDirectory });
+
+ verifyDirs(t, start, dirs, moduleDirectory);
+
+ t.end();
+ });
+
+ t.test('with 1 moduleDirectory and paths options', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var paths = ['a', 'b'];
+ var moduleDirectory = 'not node modules';
+ var dirs = nodeModulesPaths(start, { paths: paths, moduleDirectory: moduleDirectory });
+
+ verifyDirs(t, start, dirs, moduleDirectory, paths);
+
+ t.end();
+ });
+
+ t.test('with 1+ moduleDirectory and paths options', function (t) {
+ var start = path.join(__dirname, 'resolver');
+ var paths = ['a', 'b'];
+ var moduleDirectories = ['not node modules', 'other modules'];
+ var dirs = nodeModulesPaths(start, { paths: paths, moduleDirectory: moduleDirectories });
+
+ verifyDirs(t, start, dirs, moduleDirectories, paths);
+
+ t.end();
+ });
+});
diff --git a/node_modules/resolve/test/node_path.js b/node_modules/resolve/test/node_path.js
new file mode 100644
index 0000000..38a7d7e
--- /dev/null
+++ b/node_modules/resolve/test/node_path.js
@@ -0,0 +1,49 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('$NODE_PATH', function (t) {
+ t.plan(4);
+
+ resolve('aaa', {
+ paths: [
+ path.join(__dirname, '/node_path/x'),
+ path.join(__dirname, '/node_path/y')
+ ],
+ basedir: __dirname
+ }, function (err, res) {
+ t.equal(res, path.join(__dirname, '/node_path/x/aaa/index.js'));
+ });
+
+ resolve('bbb', {
+ paths: [
+ path.join(__dirname, '/node_path/x'),
+ path.join(__dirname, '/node_path/y')
+ ],
+ basedir: __dirname
+ }, function (err, res) {
+ t.equal(res, path.join(__dirname, '/node_path/y/bbb/index.js'));
+ });
+
+ resolve('ccc', {
+ paths: [
+ path.join(__dirname, '/node_path/x'),
+ path.join(__dirname, '/node_path/y')
+ ],
+ basedir: __dirname
+ }, function (err, res) {
+ t.equal(res, path.join(__dirname, '/node_path/x/ccc/index.js'));
+ });
+
+ // ensure that relative paths still resolve against the
+ // regular `node_modules` correctly
+ resolve('tap', {
+ paths: [
+ 'node_path'
+ ],
+ basedir: 'node_path/x'
+ }, function (err, res) {
+ var root = require('tap/package.json').main;
+ t.equal(res, path.resolve(__dirname, '..', 'node_modules/tap', root));
+ });
+});
diff --git a/node_modules/resolve/test/node_path/x/aaa/index.js b/node_modules/resolve/test/node_path/x/aaa/index.js
new file mode 100644
index 0000000..ad70d0b
--- /dev/null
+++ b/node_modules/resolve/test/node_path/x/aaa/index.js
@@ -0,0 +1 @@
+module.exports = 'A';
diff --git a/node_modules/resolve/test/node_path/x/ccc/index.js b/node_modules/resolve/test/node_path/x/ccc/index.js
new file mode 100644
index 0000000..a64132e
--- /dev/null
+++ b/node_modules/resolve/test/node_path/x/ccc/index.js
@@ -0,0 +1 @@
+module.exports = 'C';
diff --git a/node_modules/resolve/test/node_path/y/bbb/index.js b/node_modules/resolve/test/node_path/y/bbb/index.js
new file mode 100644
index 0000000..4d0f32e
--- /dev/null
+++ b/node_modules/resolve/test/node_path/y/bbb/index.js
@@ -0,0 +1 @@
+module.exports = 'B';
diff --git a/node_modules/resolve/test/node_path/y/ccc/index.js b/node_modules/resolve/test/node_path/y/ccc/index.js
new file mode 100644
index 0000000..793315e
--- /dev/null
+++ b/node_modules/resolve/test/node_path/y/ccc/index.js
@@ -0,0 +1 @@
+module.exports = 'CY';
diff --git a/node_modules/resolve/test/nonstring.js b/node_modules/resolve/test/nonstring.js
new file mode 100644
index 0000000..ef63c40
--- /dev/null
+++ b/node_modules/resolve/test/nonstring.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var resolve = require('../');
+
+test('nonstring', function (t) {
+ t.plan(1);
+ resolve(555, function (err, res, pkg) {
+ t.ok(err);
+ });
+});
diff --git a/node_modules/resolve/test/pathfilter.js b/node_modules/resolve/test/pathfilter.js
new file mode 100644
index 0000000..733045a
--- /dev/null
+++ b/node_modules/resolve/test/pathfilter.js
@@ -0,0 +1,42 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('#62: deep module references and the pathFilter', function (t) {
+ t.plan(9);
+
+ var resolverDir = path.join(__dirname, '/pathfilter/deep_ref');
+ var pathFilter = function (pkg, x, remainder) {
+ t.equal(pkg.version, '1.2.3');
+ t.equal(x, path.join(resolverDir, 'node_modules/deep/ref'));
+ t.equal(remainder, 'ref');
+ return 'alt';
+ };
+
+ resolve('deep/ref', { basedir: resolverDir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+
+ t.equal(pkg.version, '1.2.3');
+ t.equal(res, path.join(resolverDir, 'node_modules/deep/ref.js'));
+ });
+
+ resolve(
+ 'deep/deeper/ref',
+ { basedir: resolverDir },
+ function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.notEqual(pkg, undefined);
+ t.equal(pkg.version, '1.2.3');
+ t.equal(res, path.join(resolverDir, 'node_modules/deep/deeper/ref.js'));
+ }
+ );
+
+ resolve(
+ 'deep/ref',
+ { basedir: resolverDir, pathFilter: pathFilter },
+ function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(resolverDir, 'node_modules/deep/alt.js'));
+ }
+ );
+});
diff --git a/node_modules/resolve/test/pathfilter/deep_ref/main.js b/node_modules/resolve/test/pathfilter/deep_ref/main.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/precedence.js b/node_modules/resolve/test/precedence.js
new file mode 100644
index 0000000..2febb59
--- /dev/null
+++ b/node_modules/resolve/test/precedence.js
@@ -0,0 +1,23 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('precedence', function (t) {
+ t.plan(3);
+ var dir = path.join(__dirname, 'precedence/aaa');
+
+ resolve('./', { basedir: dir }, function (err, res, pkg) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, 'index.js'));
+ t.equal(pkg.name, 'resolve');
+ });
+});
+
+test('./ should not load ${dir}.js', function (t) { // eslint-disable-line no-template-curly-in-string
+ t.plan(1);
+ var dir = path.join(__dirname, 'precedence/bbb');
+
+ resolve('./', { basedir: dir }, function (err, res, pkg) {
+ t.ok(err);
+ });
+});
diff --git a/node_modules/resolve/test/precedence/aaa.js b/node_modules/resolve/test/precedence/aaa.js
new file mode 100644
index 0000000..b83a3e7
--- /dev/null
+++ b/node_modules/resolve/test/precedence/aaa.js
@@ -0,0 +1 @@
+module.exports = 'wtf';
diff --git a/node_modules/resolve/test/precedence/aaa/index.js b/node_modules/resolve/test/precedence/aaa/index.js
new file mode 100644
index 0000000..e0f8f6a
--- /dev/null
+++ b/node_modules/resolve/test/precedence/aaa/index.js
@@ -0,0 +1 @@
+module.exports = 'okok';
diff --git a/node_modules/resolve/test/precedence/aaa/main.js b/node_modules/resolve/test/precedence/aaa/main.js
new file mode 100644
index 0000000..93542a9
--- /dev/null
+++ b/node_modules/resolve/test/precedence/aaa/main.js
@@ -0,0 +1 @@
+console.log(require('./'));
diff --git a/node_modules/resolve/test/precedence/bbb.js b/node_modules/resolve/test/precedence/bbb.js
new file mode 100644
index 0000000..2298f47
--- /dev/null
+++ b/node_modules/resolve/test/precedence/bbb.js
@@ -0,0 +1 @@
+module.exports = '>_<';
diff --git a/node_modules/resolve/test/precedence/bbb/main.js b/node_modules/resolve/test/precedence/bbb/main.js
new file mode 100644
index 0000000..716b81d
--- /dev/null
+++ b/node_modules/resolve/test/precedence/bbb/main.js
@@ -0,0 +1 @@
+console.log(require('./')); // should throw
diff --git a/node_modules/resolve/test/resolver.js b/node_modules/resolve/test/resolver.js
new file mode 100644
index 0000000..adde544
--- /dev/null
+++ b/node_modules/resolve/test/resolver.js
@@ -0,0 +1,327 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('async foo', function (t) {
+ t.plan(10);
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('./foo', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'foo.js'));
+ t.equal(pkg && pkg.name, 'resolve');
+ });
+
+ resolve('./foo.js', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'foo.js'));
+ t.equal(pkg && pkg.name, 'resolve');
+ });
+
+ resolve('./foo', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'foo.js'));
+ t.equal(pkg && pkg.main, 'resolver');
+ });
+
+ resolve('./foo.js', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'foo.js'));
+ t.equal(pkg.main, 'resolver');
+ });
+
+ resolve('foo', { basedir: dir }, function (err) {
+ t.equal(err.message, "Cannot find module 'foo' from '" + path.resolve(dir) + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+});
+
+test('bar', function (t) {
+ t.plan(6);
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('foo', { basedir: dir + '/bar' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('foo', { basedir: dir + '/bar' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('foo', { basedir: dir + '/bar', 'package': { main: 'bar' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'bar/node_modules/foo/index.js'));
+ t.equal(pkg, undefined);
+ });
+});
+
+test('baz', function (t) {
+ t.plan(4);
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('./baz', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'baz/quux.js'));
+ t.equal(pkg.main, 'quux.js');
+ });
+
+ resolve('./baz', { basedir: dir, 'package': { main: 'resolver' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'baz/quux.js'));
+ t.equal(pkg.main, 'quux.js');
+ });
+});
+
+test('biz', function (t) {
+ t.plan(24);
+ var dir = path.join(__dirname, 'resolver/biz/node_modules');
+
+ resolve('./grux', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'grux/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('./grux', { basedir: dir, 'package': { main: 'biz' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'grux/index.js'));
+ t.equal(pkg.main, 'biz');
+ });
+
+ resolve('./garply', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'garply/lib/index.js'));
+ t.equal(pkg.main, './lib');
+ });
+
+ resolve('./garply', { basedir: dir, 'package': { main: 'biz' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'garply/lib/index.js'));
+ t.equal(pkg.main, './lib');
+ });
+
+ resolve('tiv', { basedir: dir + '/grux' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'tiv/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('tiv', { basedir: dir + '/grux', 'package': { main: 'grux' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'tiv/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('tiv', { basedir: dir + '/garply' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'tiv/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('tiv', { basedir: dir + '/garply', 'package': { main: './lib' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'tiv/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('grux', { basedir: dir + '/tiv' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'grux/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('grux', { basedir: dir + '/tiv', 'package': { main: 'tiv' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'grux/index.js'));
+ t.equal(pkg, undefined);
+ });
+
+ resolve('garply', { basedir: dir + '/tiv' }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'garply/lib/index.js'));
+ t.equal(pkg.main, './lib');
+ });
+
+ resolve('garply', { basedir: dir + '/tiv', 'package': { main: 'tiv' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'garply/lib/index.js'));
+ t.equal(pkg.main, './lib');
+ });
+});
+
+test('quux', function (t) {
+ t.plan(2);
+ var dir = path.join(__dirname, 'resolver/quux');
+
+ resolve('./foo', { basedir: dir, 'package': { main: 'quux' } }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'foo/index.js'));
+ t.equal(pkg.main, 'quux');
+ });
+});
+
+test('normalize', function (t) {
+ t.plan(2);
+ var dir = path.join(__dirname, 'resolver/biz/node_modules/grux');
+
+ resolve('../grux', { basedir: dir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'index.js'));
+ t.equal(pkg, undefined);
+ });
+});
+
+test('cup', function (t) {
+ t.plan(4);
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('./cup', { basedir: dir, extensions: ['.js', '.coffee'] }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'cup.coffee'));
+ });
+
+ resolve('./cup.coffee', { basedir: dir }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'cup.coffee'));
+ });
+
+ resolve('./cup', { basedir: dir, extensions: ['.js'] }, function (err, res) {
+ t.equal(err.message, "Cannot find module './cup' from '" + path.resolve(dir) + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+});
+
+test('mug', function (t) {
+ t.plan(3);
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('./mug', { basedir: dir }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'mug.js'));
+ });
+
+ resolve('./mug', { basedir: dir, extensions: ['.coffee', '.js'] }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, '/mug.coffee'));
+ });
+
+ resolve('./mug', { basedir: dir, extensions: ['.js', '.coffee'] }, function (err, res) {
+ t.equal(res, path.join(dir, '/mug.js'));
+ });
+});
+
+test('other path', function (t) {
+ t.plan(6);
+ var resolverDir = path.join(__dirname, 'resolver');
+ var dir = path.join(resolverDir, 'bar');
+ var otherDir = path.join(resolverDir, 'other_path');
+
+ resolve('root', { basedir: dir, paths: [otherDir] }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(resolverDir, 'other_path/root.js'));
+ });
+
+ resolve('lib/other-lib', { basedir: dir, paths: [otherDir] }, function (err, res) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(resolverDir, 'other_path/lib/other-lib.js'));
+ });
+
+ resolve('root', { basedir: dir }, function (err, res) {
+ t.equal(err.message, "Cannot find module 'root' from '" + path.resolve(dir) + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+
+ resolve('zzz', { basedir: dir, paths: [otherDir] }, function (err, res) {
+ t.equal(err.message, "Cannot find module 'zzz' from '" + path.resolve(dir) + "'");
+ t.equal(err.code, 'MODULE_NOT_FOUND');
+ });
+});
+
+test('incorrect main', function (t) {
+ t.plan(1);
+
+ var resolverDir = path.join(__dirname, 'resolver');
+ var dir = path.join(resolverDir, 'incorrect_main');
+
+ resolve('./incorrect_main', { basedir: resolverDir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'index.js'));
+ });
+});
+
+test('without basedir', function (t) {
+ t.plan(1);
+
+ var dir = path.join(__dirname, 'resolver/without_basedir');
+ var tester = require(path.join(dir, 'main.js'));
+
+ tester(t, function (err, res, pkg) {
+ if (err) {
+ t.fail(err);
+ } else {
+ t.equal(res, path.join(dir, 'node_modules/mymodule.js'));
+ }
+ });
+});
+
+test('#25: node modules with the same name as node stdlib modules', function (t) {
+ t.plan(1);
+
+ var resolverDir = path.join(__dirname, 'resolver/punycode');
+
+ resolve('punycode', { basedir: resolverDir }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(resolverDir, 'node_modules/punycode/index.js'));
+ });
+});
+
+test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) {
+ t.plan(2);
+
+ var dir = path.join(__dirname, 'resolver');
+
+ resolve('./foo', { basedir: path.join(dir, 'same_names') }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'same_names/foo.js'));
+ });
+
+ resolve('./foo/', { basedir: path.join(dir, 'same_names') }, function (err, res, pkg) {
+ if (err) t.fail(err);
+ t.equal(res, path.join(dir, 'same_names/foo/index.js'));
+ });
+});
+
+test('async: #121 - treating an existing file as a dir when no basedir', function (t) {
+ var testFile = path.basename(__filename);
+
+ t.test('sanity check', function (st) {
+ st.plan(1);
+ resolve('./' + testFile, function (err, res, pkg) {
+ if (err) t.fail(err);
+ st.equal(res, __filename, 'sanity check');
+ });
+ });
+
+ t.test('with a fake directory', function (st) {
+ st.plan(4);
+
+ resolve('./' + testFile + '/blah', function (err, res, pkg) {
+ st.ok(err, 'there is an error');
+ st.notOk(res, 'no result');
+
+ st.equal(err && err.code, 'MODULE_NOT_FOUND', 'error code matches require.resolve');
+ st.equal(
+ err && err.message,
+ 'Cannot find module \'./' + testFile + '/blah\' from \'' + __dirname + '\'',
+ 'can not find nonexistent module'
+ );
+ st.end();
+ });
+ });
+
+ t.end();
+});
diff --git a/node_modules/resolve/test/resolver/baz/doom.js b/node_modules/resolve/test/resolver/baz/doom.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/resolver/baz/package.json b/node_modules/resolve/test/resolver/baz/package.json
new file mode 100644
index 0000000..c41e4db
--- /dev/null
+++ b/node_modules/resolve/test/resolver/baz/package.json
@@ -0,0 +1,3 @@
+{
+ "main": "quux.js"
+}
diff --git a/node_modules/resolve/test/resolver/baz/quux.js b/node_modules/resolve/test/resolver/baz/quux.js
new file mode 100644
index 0000000..bd816ea
--- /dev/null
+++ b/node_modules/resolve/test/resolver/baz/quux.js
@@ -0,0 +1 @@
+module.exports = 1;
diff --git a/node_modules/resolve/test/resolver/cup.coffee b/node_modules/resolve/test/resolver/cup.coffee
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/node_modules/resolve/test/resolver/cup.coffee
@@ -0,0 +1 @@
+
diff --git a/node_modules/resolve/test/resolver/foo.js b/node_modules/resolve/test/resolver/foo.js
new file mode 100644
index 0000000..bd816ea
--- /dev/null
+++ b/node_modules/resolve/test/resolver/foo.js
@@ -0,0 +1 @@
+module.exports = 1;
diff --git a/node_modules/resolve/test/resolver/incorrect_main/index.js b/node_modules/resolve/test/resolver/incorrect_main/index.js
new file mode 100644
index 0000000..bc1fb0a
--- /dev/null
+++ b/node_modules/resolve/test/resolver/incorrect_main/index.js
@@ -0,0 +1,2 @@
+// this is the actual main file 'index.js', not 'wrong.js' like the package.json would indicate
+module.exports = 1;
diff --git a/node_modules/resolve/test/resolver/incorrect_main/package.json b/node_modules/resolve/test/resolver/incorrect_main/package.json
new file mode 100644
index 0000000..b718804
--- /dev/null
+++ b/node_modules/resolve/test/resolver/incorrect_main/package.json
@@ -0,0 +1,3 @@
+{
+ "main": "wrong.js"
+}
diff --git a/node_modules/resolve/test/resolver/mug.coffee b/node_modules/resolve/test/resolver/mug.coffee
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/resolver/mug.js b/node_modules/resolve/test/resolver/mug.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/resolver/other_path/lib/other-lib.js b/node_modules/resolve/test/resolver/other_path/lib/other-lib.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/resolver/other_path/root.js b/node_modules/resolve/test/resolver/other_path/root.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/resolve/test/resolver/quux/foo/index.js b/node_modules/resolve/test/resolver/quux/foo/index.js
new file mode 100644
index 0000000..bd816ea
--- /dev/null
+++ b/node_modules/resolve/test/resolver/quux/foo/index.js
@@ -0,0 +1 @@
+module.exports = 1;
diff --git a/node_modules/resolve/test/resolver/same_names/foo.js b/node_modules/resolve/test/resolver/same_names/foo.js
new file mode 100644
index 0000000..888cae3
--- /dev/null
+++ b/node_modules/resolve/test/resolver/same_names/foo.js
@@ -0,0 +1 @@
+module.exports = 42;
diff --git a/node_modules/resolve/test/resolver/same_names/foo/index.js b/node_modules/resolve/test/resolver/same_names/foo/index.js
new file mode 100644
index 0000000..bd816ea
--- /dev/null
+++ b/node_modules/resolve/test/resolver/same_names/foo/index.js
@@ -0,0 +1 @@
+module.exports = 1;
diff --git a/node_modules/resolve/test/resolver/without_basedir/main.js b/node_modules/resolve/test/resolver/without_basedir/main.js
new file mode 100644
index 0000000..5b31975
--- /dev/null
+++ b/node_modules/resolve/test/resolver/without_basedir/main.js
@@ -0,0 +1,5 @@
+var resolve = require('../../../');
+
+module.exports = function (t, cb) {
+ resolve('mymodule', null, cb);
+};
diff --git a/node_modules/resolve/test/resolver_sync.js b/node_modules/resolve/test/resolver_sync.js
new file mode 100644
index 0000000..2bc3610
--- /dev/null
+++ b/node_modules/resolve/test/resolver_sync.js
@@ -0,0 +1,253 @@
+var path = require('path');
+var test = require('tape');
+var resolve = require('../');
+
+test('foo', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+
+ t.equal(
+ resolve.sync('./foo', { basedir: dir }),
+ path.join(dir, 'foo.js')
+ );
+
+ t.equal(
+ resolve.sync('./foo.js', { basedir: dir }),
+ path.join(dir, 'foo.js')
+ );
+
+ t.throws(function () {
+ resolve.sync('foo', { basedir: dir });
+ });
+
+ t.end();
+});
+
+test('bar', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+
+ t.equal(
+ resolve.sync('foo', { basedir: path.join(dir, 'bar') }),
+ path.join(dir, 'bar/node_modules/foo/index.js')
+ );
+ t.end();
+});
+
+test('baz', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+
+ t.equal(
+ resolve.sync('./baz', { basedir: dir }),
+ path.join(dir, 'baz/quux.js')
+ );
+ t.end();
+});
+
+test('biz', function (t) {
+ var dir = path.join(__dirname, 'resolver/biz/node_modules');
+ t.equal(
+ resolve.sync('./grux', { basedir: dir }),
+ path.join(dir, 'grux/index.js')
+ );
+
+ t.equal(
+ resolve.sync('tiv', { basedir: path.join(dir, 'grux') }),
+ path.join(dir, 'tiv/index.js')
+ );
+
+ t.equal(
+ resolve.sync('grux', { basedir: path.join(dir, 'tiv') }),
+ path.join(dir, 'grux/index.js')
+ );
+ t.end();
+});
+
+test('normalize', function (t) {
+ var dir = path.join(__dirname, 'resolver/biz/node_modules/grux');
+ t.equal(
+ resolve.sync('../grux', { basedir: dir }),
+ path.join(dir, 'index.js')
+ );
+ t.end();
+});
+
+test('cup', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+ t.equal(
+ resolve.sync('./cup', {
+ basedir: dir,
+ extensions: ['.js', '.coffee']
+ }),
+ path.join(dir, 'cup.coffee')
+ );
+
+ t.equal(
+ resolve.sync('./cup.coffee', { basedir: dir }),
+ path.join(dir, 'cup.coffee')
+ );
+
+ t.throws(function () {
+ resolve.sync('./cup', {
+ basedir: dir,
+ extensions: ['.js']
+ });
+ });
+
+ t.end();
+});
+
+test('mug', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+ t.equal(
+ resolve.sync('./mug', { basedir: dir }),
+ path.join(dir, 'mug.js')
+ );
+
+ t.equal(
+ resolve.sync('./mug', {
+ basedir: dir,
+ extensions: ['.coffee', '.js']
+ }),
+ path.join(dir, 'mug.coffee')
+ );
+
+ t.equal(
+ resolve.sync('./mug', {
+ basedir: dir,
+ extensions: ['.js', '.coffee']
+ }),
+ path.join(dir, 'mug.js')
+ );
+
+ t.end();
+});
+
+test('other path', function (t) {
+ var resolverDir = path.join(__dirname, 'resolver');
+ var dir = path.join(resolverDir, 'bar');
+ var otherDir = path.join(resolverDir, 'other_path');
+
+ t.equal(
+ resolve.sync('root', {
+ basedir: dir,
+ paths: [otherDir]
+ }),
+ path.join(resolverDir, 'other_path/root.js')
+ );
+
+ t.equal(
+ resolve.sync('lib/other-lib', {
+ basedir: dir,
+ paths: [otherDir]
+ }),
+ path.join(resolverDir, 'other_path/lib/other-lib.js')
+ );
+
+ t.throws(function () {
+ resolve.sync('root', { basedir: dir });
+ });
+
+ t.throws(function () {
+ resolve.sync('zzz', {
+ basedir: dir,
+ paths: [otherDir]
+ });
+ });
+
+ t.end();
+});
+
+test('incorrect main', function (t) {
+ var resolverDir = path.join(__dirname, 'resolver');
+ var dir = path.join(resolverDir, 'incorrect_main');
+
+ t.equal(
+ resolve.sync('./incorrect_main', { basedir: resolverDir }),
+ path.join(dir, 'index.js')
+ );
+
+ t.end();
+});
+
+test('#25: node modules with the same name as node stdlib modules', function (t) {
+ var resolverDir = path.join(__dirname, 'resolver/punycode');
+
+ t.equal(
+ resolve.sync('punycode', { basedir: resolverDir }),
+ path.join(resolverDir, 'node_modules/punycode/index.js')
+ );
+
+ t.end();
+});
+
+var stubStatSync = function stubStatSync(fn) {
+ var fs = require('fs');
+ var statSync = fs.statSync;
+ try {
+ fs.statSync = function () {
+ throw new EvalError('Unknown Error');
+ };
+ return fn();
+ } finally {
+ fs.statSync = statSync;
+ }
+};
+
+test('#79 - re-throw non ENOENT errors from stat', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+
+ stubStatSync(function () {
+ t.throws(function () {
+ resolve.sync('foo', { basedir: dir });
+ }, /Unknown Error/);
+ });
+
+ t.end();
+});
+
+test('#52 - incorrectly resolves module-paths like "./someFolder/" when there is a file of the same name', function (t) {
+ var dir = path.join(__dirname, 'resolver');
+
+ t.equal(
+ resolve.sync('./foo', { basedir: path.join(dir, 'same_names') }),
+ path.join(dir, 'same_names/foo.js')
+ );
+ t.equal(
+ resolve.sync('./foo/', { basedir: path.join(dir, 'same_names') }),
+ path.join(dir, 'same_names/foo/index.js')
+ );
+ t.end();
+});
+
+test('sync: #121 - treating an existing file as a dir when no basedir', function (t) {
+ var testFile = path.basename(__filename);
+
+ t.test('sanity check', function (st) {
+ st.equal(
+ resolve.sync('./' + testFile),
+ __filename,
+ 'sanity check'
+ );
+ st.end();
+ });
+
+ t.test('with a fake directory', function (st) {
+ function run() { return resolve.sync('./' + testFile + '/blah'); }
+
+ st.throws(run, 'throws an error');
+
+ try {
+ run();
+ } catch (e) {
+ st.equal(e.code, 'MODULE_NOT_FOUND', 'error code matches require.resolve');
+ st.equal(
+ e.message,
+ 'Cannot find module \'./' + testFile + '/blah\' from \'' + __dirname + '\'',
+ 'can not find nonexistent module'
+ );
+ }
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/resolve/test/subdirs.js b/node_modules/resolve/test/subdirs.js
new file mode 100644
index 0000000..b7b8450
--- /dev/null
+++ b/node_modules/resolve/test/subdirs.js
@@ -0,0 +1,13 @@
+var test = require('tape');
+var resolve = require('../');
+var path = require('path');
+
+test('subdirs', function (t) {
+ t.plan(2);
+
+ var dir = path.join(__dirname, '/subdirs');
+ resolve('a/b/c/x.json', { basedir: dir }, function (err, res) {
+ t.ifError(err);
+ t.equal(res, path.join(dir, 'node_modules/a/b/c/x.json'));
+ });
+});
diff --git a/node_modules/retry-as-promised/.npmignore b/node_modules/retry-as-promised/.npmignore
new file mode 100644
index 0000000..123ae94
--- /dev/null
+++ b/node_modules/retry-as-promised/.npmignore
@@ -0,0 +1,27 @@
+# Logs
+logs
+*.log
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
+node_modules
diff --git a/node_modules/retry-as-promised/LICENSE b/node_modules/retry-as-promised/LICENSE
new file mode 100644
index 0000000..d007bfb
--- /dev/null
+++ b/node_modules/retry-as-promised/LICENSE
@@ -0,0 +1,23 @@
+The MIT License
+
+Copyright (c) 2015-2016 Mick Hansen. http://mhansen.io
+
+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/node_modules/retry-as-promised/README.md b/node_modules/retry-as-promised/README.md
new file mode 100644
index 0000000..1d0bc26
--- /dev/null
+++ b/node_modules/retry-as-promised/README.md
@@ -0,0 +1,33 @@
+# retry-as-promised
+
+```sh
+$ npm install --save retry-as-promised
+```
+
+Retry a failed promise
+
+```js
+var retry = require('retry-as-promised');
+
+var warningFn = function(msg){ someLoggingFunction(msg, 'notice'); };
+
+// Will call the until max retries or the promise is resolved.
+return retry(function () {
+ return promise;
+}, {
+ max: 3, // maximum amount of tries
+ timeout: 10000 // throw if no response or error within milisecnd timeout, default: undefined,
+ match: [ // Must match error signature (ala bluebird catch) to continue
+ Sequelize.ConnectionError,
+ 'SQLITE_BUSY'
+ ],
+ backoffBase: 1000 // Initial backoff duration in ms. Default: 100,
+ backoffExponent: 1.5 // Exponent to increase backoff each try. Default: 1.1
+ report: warningFn, // the function used for reporting; must have a (string, object) argument signature, where string is the message that will passed in by retry-as-promised, and the object will be this configuration object + the $current property
+ name: 'SourceX' // if user supplies string, it will be used when composing error/reporting messages; else if retry gets a callback, uses callback name in erroring/reporting; else (default) uses litteral string 'unknown'
+});
+```
+
+## Tested with
+
+- Bluebird
diff --git a/node_modules/retry-as-promised/index.js b/node_modules/retry-as-promised/index.js
new file mode 100644
index 0000000..f822d5f
--- /dev/null
+++ b/node_modules/retry-as-promised/index.js
@@ -0,0 +1,88 @@
+var debug = require('debug')('retry-as-promised')
+ , error = require('debug')('retry-as-promised:error')
+ , Promise = require('bluebird');
+
+module.exports = function retryAsPromised(callback, options) {
+ if (!callback || !options) throw new Error('retry-as-promised must be passed a callback and a options set or a number');
+
+ if (typeof options === 'number') {
+ options = {max: options};
+ }
+
+ // Super cheap clone
+ options = {
+ $current: options.$current || 1,
+ max: options.max,
+ timeout: options.timeout || undefined,
+ match: options.match || [],
+ backoffBase: options.backoffBase === undefined ? 100 : options.backoffBase,
+ backoffExponent: options.backoffExponent || 1.1,
+ report: options.report || null,
+ name: options.name || callback.name || 'unknown'
+ };
+
+ // Massage match option into array so we can blindly treat it as such later
+ if (!Array.isArray(options.match)) options.match = [options.match];
+
+ debug('Trying '+ options.name + ' (%s)', options.$current);
+ if(options.report) options.report('Trying ' + options.name + ' #' + options.$current + ' at ' + new Date().toLocaleTimeString(), options);
+
+ return new Promise(function (resolve, reject) {
+ var timeout, backoffTimeout;
+
+ if (options.timeout) {
+ timeout = setTimeout(function () {
+ if (backoffTimeout) clearTimeout(backoffTimeout);
+ reject(Promise.TimeoutError( options.name + ' timed out'));
+ }, options.timeout);
+ }
+
+ Promise.resolve(callback()).then(resolve).tap(function () {
+ if (timeout) clearTimeout(timeout);
+ if (backoffTimeout) clearTimeout(backoffTimeout);
+ }).catch(function (err) {
+ if (timeout) clearTimeout(timeout);
+ if (backoffTimeout) clearTimeout(backoffTimeout);
+
+ error(err && err.toString() || err);
+ if (options.report) options.report('Try ' + options.name + ' #' + options.$current + ' failed: ' + err.toString(), options, err);
+
+ // Should not retry if max has been reached
+ var shouldRetry = options.$current < options.max;
+
+ if (shouldRetry && options.match.length && err) {
+ // If match is defined we should fail if it is not met
+ shouldRetry = options.match.reduce(function (shouldRetry, match) {
+ if (shouldRetry) return shouldRetry;
+
+ if (match === err.toString() ||
+ match === err.message ||
+ (typeof match === "function" && err instanceof match) ||
+ (match instanceof RegExp && (match.test(err.message) || match.test(err.toString()) ))
+ ) {
+ shouldRetry = true;
+ }
+ return shouldRetry;
+ }, false);
+ }
+
+ if (!shouldRetry) return reject(err);
+
+ // Do some accounting
+ options.$current++;
+
+ if (options.backoffBase) {
+ // Use backoff function to ease retry rate
+ options.backoffBase = Math.pow(options.backoffBase, options.backoffExponent);
+ debug('Delaying retry of '+ options.name+' by %s', options.backoffBase);
+ if(options.report) options.report('Delaying retry of ' + options.name + ' by ' + options.backoffBase, options);
+ backoffTimeout = setTimeout(function() {
+ retryAsPromised(callback, options).then(resolve).catch(reject);
+ }, options.backoffBase);
+ } else {
+ retryAsPromised(callback, options).then(resolve).catch(reject);
+ }
+
+ });
+ });
+};
diff --git a/node_modules/retry-as-promised/package.json b/node_modules/retry-as-promised/package.json
new file mode 100644
index 0000000..ca42a3a
--- /dev/null
+++ b/node_modules/retry-as-promised/package.json
@@ -0,0 +1,102 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "retry-as-promised@^2.0.0",
+ "scope": null,
+ "escapedName": "retry-as-promised",
+ "name": "retry-as-promised",
+ "rawSpec": "^2.0.0",
+ "spec": ">=2.0.0 <3.0.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize"
+ ]
+ ],
+ "_from": "retry-as-promised@>=2.0.0 <3.0.0",
+ "_id": "retry-as-promised@2.2.0",
+ "_inCache": true,
+ "_location": "/retry-as-promised",
+ "_nodeVersion": "4.0.0",
+ "_npmOperationalInternal": {
+ "host": "packages-18-east.internal.npmjs.com",
+ "tmp": "tmp/retry-as-promised-2.2.0.tgz_1477652948471_0.21952940267510712"
+ },
+ "_npmUser": {
+ "name": "mickhansen",
+ "email": "mick.kasper.hansen@gmail.com"
+ },
+ "_npmVersion": "2.14.2",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "retry-as-promised@^2.0.0",
+ "scope": null,
+ "escapedName": "retry-as-promised",
+ "name": "retry-as-promised",
+ "rawSpec": "^2.0.0",
+ "spec": ">=2.0.0 <3.0.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/sequelize"
+ ],
+ "_resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz",
+ "_shasum": "b0463d7fd3cf5b2fed64500ab6e8b8a49c5b8e6c",
+ "_shrinkwrap": null,
+ "_spec": "retry-as-promised@^2.0.0",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/sequelize",
+ "author": {
+ "name": "Mick Hansen",
+ "email": "maker@mhansen.io"
+ },
+ "bugs": {
+ "url": "https://github.com/mickhansen/retry-as-promised/issues"
+ },
+ "dependencies": {
+ "bluebird": "^3.4.6",
+ "cross-env": "^3.1.2",
+ "debug": "^2.2.0"
+ },
+ "description": "Retry a failed promise",
+ "devDependencies": {
+ "chai": "^2.3.0",
+ "chai-as-promised": "^5.0.0",
+ "mocha": "^2.2.5",
+ "moment": "^2.10.6",
+ "q": "^1.4.1",
+ "sinon": "^1.15.1",
+ "sinon-as-promised": "^4.0.0",
+ "sinon-chai": "^2.8.0"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "b0463d7fd3cf5b2fed64500ab6e8b8a49c5b8e6c",
+ "tarball": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.2.0.tgz"
+ },
+ "gitHead": "b3189fbccfc99e1560596df917ab17f0c2a4009f",
+ "homepage": "https://github.com/mickhansen/retry-as-promised",
+ "keywords": [
+ "retry",
+ "promise",
+ "bluebird"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "mickhansen",
+ "email": "mick.kasper.hansen@gmail.com"
+ }
+ ],
+ "name": "retry-as-promised",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/mickhansen/retry-as-promised.git"
+ },
+ "scripts": {
+ "test": "cross-env DEBUG=retry-as-promised,retry-as-promised:* NODE_ENV=test ./node_modules/.bin/mocha --check-leaks --colors -t 10000 --reporter spec test/**/*.test.js test/*.test.js"
+ },
+ "version": "2.2.0"
+}
diff --git a/node_modules/retry-as-promised/test/bluebird.test.js b/node_modules/retry-as-promised/test/bluebird.test.js
new file mode 100644
index 0000000..57cfa5f
--- /dev/null
+++ b/node_modules/retry-as-promised/test/bluebird.test.js
@@ -0,0 +1,186 @@
+var chai = require('chai')
+ , expect = chai.expect
+ , Promise = require('bluebird')
+ , moment = require('moment')
+ , sinon = require('sinon')
+ , sinonChai = require('sinon-chai')
+ , retry = require('../');
+
+chai.use(require('chai-as-promised'));
+require('sinon-as-promised')(Promise);
+
+describe('bluebird', function () {
+ var count
+ , soRejected
+ , soResolved;
+
+ beforeEach(function () {
+ count = 0;
+ soRejected = Math.random().toString();
+ soResolved = Math.random().toString();
+ });
+
+ it('should reject immediately if max is 1 (using options)', function () {
+ var callback = sinon.stub();
+ callback.resolves(soResolved);
+ callback.onCall(0).rejects(soRejected);
+ return expect(retry(callback, {max: 1, backoffBase: 0})).to.eventually.be.rejectedWith(soRejected).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should reject immediately if max is 1 (using integer)', function () {
+ var callback = sinon.stub();
+ callback.resolves(soResolved);
+ callback.onCall(0).rejects(soRejected);
+ return expect(retry(callback, 1)).to.eventually.be.rejectedWith(soRejected).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should reject after all tries if still rejected', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ return expect(retry(callback, {max: 3, backoffBase: 0})).to.eventually.be.rejectedWith(soRejected).then(function () {
+ expect(callback.callCount).to.equal(3);
+ });
+ });
+
+ it('should resolve immediately if resolved on first try', function () {
+ var callback = sinon.stub();
+ callback.resolves(soResolved);
+ callback.onCall(0).resolves(soResolved);
+ return expect(retry(callback, {max: 10, backoffBase: 0})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should resolve if resolved before hitting max', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(3).resolves(soResolved);
+ return expect(retry(callback, {max: 10, backoffBase: 0})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(4);
+ });
+ });
+
+ describe('timeout', function () {
+ it('should throw if reject on first attempt', function () {
+ return expect(retry(function () {
+ return Promise.delay(2000);
+ }, {
+ max: 1,
+ backoffBase: 0,
+ timeout: 1000
+ })).to.eventually.be.rejectedWith(Promise.TimeoutError);
+ });
+
+ it('should throw if reject on last attempt', function () {
+ return expect(retry(function () {
+ count++;
+ if (count === 3) {
+ return Promise.delay(3500);
+ }
+ return Promise.reject();
+ }, {
+ max: 3,
+ backoffBase: 0,
+ timeout: 1500
+ })).to.eventually.be.rejectedWith(Promise.TimeoutError).then(function () {
+ expect(count).to.equal(3);
+ });
+ });
+ });
+
+ describe('match', function () {
+ it('should continue retry while error is equal to match string', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(3).resolves(soResolved);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: 'Error: ' + soRejected})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(4);
+ });
+ });
+
+ it('should reject immediately if error is not equal to match string', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: 'A custom error string'})).to.eventually.be.rejectedWith(soRejected).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should continue retry while error is instanceof match', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(4).resolves(soResolved);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: Error})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(5);
+ });
+ });
+
+ it('should reject immediately if error is not instanceof match', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: function foo(){}})).to.eventually.be.rejectedWith(Error).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should continue retry while error is equal to match string in array', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(4).resolves(soResolved);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: ['Error: ' + (soRejected + 1), 'Error: ' + soRejected]})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(5);
+ });
+ });
+
+ it('should reject immediately if error is not equal to match string in array', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: ['Error: ' + (soRejected + 1), 'Error: ' + (soRejected + 2)]})).to.eventually.be.rejectedWith(Error).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should reject immediately if error is not instanceof match in array', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: ['Error: ' + (soRejected + 1), function foo(){}]})).to.eventually.be.rejectedWith(Error).then(function () {
+ expect(callback.callCount).to.equal(1);
+ });
+ });
+
+ it('should continue retry while error is instanceof match in array', function () {
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(4).resolves(soResolved);
+ return expect(retry(callback, {max: 15, backoffBase: 0, match: ['Error: ' + (soRejected + 1), Error]})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(5);
+ });
+ });
+ });
+
+ describe('backoff', function () {
+ it('should resolve after 10 retries and an eventual delay over 3400ms using default backoff', function () {
+ var startTime = moment();
+ var callback = sinon.stub();
+ callback.rejects(soRejected);
+ callback.onCall(5).resolves(soResolved);
+ return expect(retry(callback, {max: 15})).to.eventually.equal(soResolved).then(function () {
+ expect(callback.callCount).to.equal(6);
+ expect(moment().diff(startTime)).to.be.above(3400);
+ });
+ });
+
+ it('should throw TimeoutError and cancel backoff delay if timeout is reached', function () {
+ return expect(retry(function () {
+ return Promise.delay(2000);
+ }, {
+ max: 15,
+ timeout: 1000
+ })).to.eventually.be.rejectedWith(Promise.TimeoutError);
+ });
+ });
+});
diff --git a/node_modules/right-align/LICENSE b/node_modules/right-align/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/right-align/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/right-align/README.md b/node_modules/right-align/README.md
new file mode 100644
index 0000000..3abdfb3
--- /dev/null
+++ b/node_modules/right-align/README.md
@@ -0,0 +1,77 @@
+# right-align [](http://badge.fury.io/js/right-align)
+
+> Right-align the text in a string.
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i right-align --save
+```
+
+## Usage
+
+```js
+var rightAlign = require('right-align');
+rightAlign(string);
+```
+
+**Example**
+
+If used on the following:
+
+```
+Lorem ipsum dolor sit amet,
+consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+ut labore et dolore
+magna aliqua. Ut enim ad minim
+veniam, quis
+```
+
+The result would be:
+
+```
+ Lorem ipsum dolor sit amet,
+ consectetur adipiscing
+elit, sed do eiusmod tempor incididunt
+ ut labore et dolore
+ magna aliqua. Ut enim ad minim
+ veniam, quis
+```
+
+## Related projects
+
+* [align-text](https://github.com/jonschlinkert/align-text): Align the text in a string.
+* [center-align](https://github.com/jonschlinkert/center-align): Center-align the text in a string.
+* [justify](https://github.com/bahamas10/node-justify): Left or right (or both) justify text using a custom width and character
+* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string.
+* [repeat-element](https://github.com/jonschlinkert/repeat-element): Create an array by repeating the given value n times.
+* [word-wrap](https://github.com/jonschlinkert/word-wrap): Wrap words to a specified length.
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/right-align/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 09, 2015._
diff --git a/node_modules/right-align/index.js b/node_modules/right-align/index.js
new file mode 100644
index 0000000..ad54f5f
--- /dev/null
+++ b/node_modules/right-align/index.js
@@ -0,0 +1,16 @@
+/*!
+ * right-align
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var align = require('align-text');
+
+module.exports = function rightAlign(val) {
+ return align(val, function (len, longest) {
+ return longest - len;
+ });
+};
diff --git a/node_modules/right-align/package.json b/node_modules/right-align/package.json
new file mode 100644
index 0000000..e68685e
--- /dev/null
+++ b/node_modules/right-align/package.json
@@ -0,0 +1,101 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "right-align@^0.1.1",
+ "scope": null,
+ "escapedName": "right-align",
+ "name": "right-align",
+ "rawSpec": "^0.1.1",
+ "spec": ">=0.1.1 <0.2.0",
+ "type": "range"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/cliui"
+ ]
+ ],
+ "_from": "right-align@>=0.1.1 <0.2.0",
+ "_id": "right-align@0.1.3",
+ "_inCache": true,
+ "_location": "/right-align",
+ "_nodeVersion": "0.12.4",
+ "_npmUser": {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ },
+ "_npmVersion": "2.10.1",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "right-align@^0.1.1",
+ "scope": null,
+ "escapedName": "right-align",
+ "name": "right-align",
+ "rawSpec": "^0.1.1",
+ "spec": ">=0.1.1 <0.2.0",
+ "type": "range"
+ },
+ "_requiredBy": [
+ "/cliui"
+ ],
+ "_resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "_shasum": "61339b722fe6a3515689210d24e14c96148613ef",
+ "_shrinkwrap": null,
+ "_spec": "right-align@^0.1.1",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/cliui",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/right-align/issues"
+ },
+ "dependencies": {
+ "align-text": "^0.1.1"
+ },
+ "description": "Right-align the text in a string.",
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "61339b722fe6a3515689210d24e14c96148613ef",
+ "tarball": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "files": [
+ "index.js"
+ ],
+ "gitHead": "23ee38d6eedbcbfed241ace6587ce5730684dd18",
+ "homepage": "https://github.com/jonschlinkert/right-align",
+ "keywords": [
+ "align",
+ "align-center",
+ "center",
+ "center-align",
+ "right",
+ "right-align",
+ "text",
+ "typography"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "maintainers": [
+ {
+ "name": "jonschlinkert",
+ "email": "github@sellside.com"
+ }
+ ],
+ "name": "right-align",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jonschlinkert/right-align.git"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "version": "0.1.3"
+}
diff --git a/node_modules/semver/.npmignore b/node_modules/semver/.npmignore
new file mode 100644
index 0000000..7300fbc
--- /dev/null
+++ b/node_modules/semver/.npmignore
@@ -0,0 +1 @@
+# nada
diff --git a/node_modules/semver/LICENSE b/node_modules/semver/LICENSE
new file mode 100644
index 0000000..0c44ae7
--- /dev/null
+++ b/node_modules/semver/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) Isaac Z. Schlueter ("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.
diff --git a/node_modules/semver/Makefile b/node_modules/semver/Makefile
new file mode 100644
index 0000000..71af0e9
--- /dev/null
+++ b/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.txt semver.js foot.js.txt
+ ( cat head.js.txt; \
+ cat semver.js | \
+ egrep -v '^ *\/\* nomin \*\/' | \
+ perl -pi -e 's/debug\([^\)]+\)//g'; \
+ cat foot.js.txt ) > semver.browser.js
+
+semver.min.js: semver.browser.js
+ uglifyjs -m semver.min.js
+
+%.gz: %
+ gzip --stdout -9 <$< >$@
+
+.PHONY: all clean
diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md
new file mode 100644
index 0000000..b5e35ff
--- /dev/null
+++ b/node_modules/semver/README.md
@@ -0,0 +1,303 @@
+semver(1) -- 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 [ [...]] [-r | -i | --preid | -l | -rv]
+ Test if version(s) satisfy the supplied range(s), and sort them.
+
+ Multiple versions or ranges may be supplied, unless increment
+ option is 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
+ .
+
+A leading `"="` or `"v"` character is stripped off and ignored.
+
+## Ranges
+
+A `version range` is a set of `comparators` which specify versions
+that satisfy the range.
+
+A `comparator` is composed of an `operator` and a `version`. The set
+of primitive `operators` is:
+
+* `<` Less than
+* `<=` Less than or equal to
+* `>` Greater than
+* `>=` Greater than or equal to
+* `=` Equal. If no operator is specified, then equality is assumed,
+ so this operator is optional, but MAY be included.
+
+For example, the comparator `>=1.2.7` would match the versions
+`1.2.7`, `1.2.8`, `2.5.3`, and `1.3.9`, but not the versions `1.2.6`
+or `1.1.0`.
+
+Comparators can be joined by whitespace to form a `comparator set`,
+which is satisfied by the **intersection** of all of the comparators
+it includes.
+
+A range is composed of one or more comparator sets, joined by `||`. A
+version matches a range if and only if every comparator in at least
+one of the `||`-separated comparator sets is satisfied by the version.
+
+For example, the range `>=1.2.7 <1.3.0` would match the versions
+`1.2.7`, `1.2.8`, and `1.2.99`, but not the versions `1.2.6`, `1.3.0`,
+or `1.1.0`.
+
+The range `1.2.7 || >=1.2.9 <2.0.0` would match the versions `1.2.7`,
+`1.2.9`, and `1.4.6`, but not the versions `1.2.8` or `2.0.0`.
+
+### Prerelease Tags
+
+If a version has a prerelease tag (for example, `1.2.3-alpha.3`) then
+it will only be allowed to satisfy comparator sets if at least one
+comparator with the same `[major, minor, patch]` tuple also has a
+prerelease tag.
+
+For example, the range `>1.2.3-alpha.3` would be allowed to match the
+version `1.2.3-alpha.7`, but it would *not* be satisfied by
+`3.4.5-alpha.9`, even though `3.4.5-alpha.9` is technically "greater
+than" `1.2.3-alpha.3` according to the SemVer sort rules. The version
+range only accepts prerelease tags on the `1.2.3` version. The
+version `3.4.5` *would* satisfy the range, because it does not have a
+prerelease flag, and `3.4.5` is greater than `1.2.3-alpha.7`.
+
+The purpose for this behavior is twofold. First, prerelease versions
+frequently are updated very quickly, and contain many breaking changes
+that are (by the author's design) not yet fit for public consumption.
+Therefore, by default, they are excluded from range matching
+semantics.
+
+Second, a user who has opted into using a prerelease version has
+clearly indicated the intent to use *that specific* set of
+alpha/beta/rc versions. By including a prerelease tag in the range,
+the user is indicating that they are aware of the risk. However, it
+is still not appropriate to assume that they have opted into taking a
+similar risk on the *next* set of prerelease versions.
+
+#### Prerelease Identifiers
+
+The method `.inc` takes an additional `identifier` string argument that
+will append the value of the string as a prerelease identifier:
+
+```javascript
+> semver.inc('1.2.3', 'pre', 'beta')
+'1.2.4-beta.0'
+```
+
+command-line example:
+
+```shell
+$ semver 1.2.3 -i prerelease --preid beta
+1.2.4-beta.0
+```
+
+Which then can be used to increment further:
+
+```shell
+$ semver 1.2.4-beta.0 -i prerelease
+1.2.4-beta.1
+```
+
+### Advanced Range Syntax
+
+Advanced range syntax desugars to primitive comparators in
+deterministic ways.
+
+Advanced ranges may be combined in the same way as primitive
+comparators using white space or `||`.
+
+#### Hyphen Ranges `X.Y.Z - A.B.C`
+
+Specifies an inclusive set.
+
+* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
+
+If a partial version is provided as the first version in the inclusive
+range, then the missing pieces are replaced with zeroes.
+
+* `1.2 - 2.3.4` := `>=1.2.0 <=2.3.4`
+
+If a partial version is provided as the second version in the
+inclusive range, then all versions that start with the supplied parts
+of the tuple are accepted, but nothing that would be greater than the
+provided tuple parts.
+
+* `1.2.3 - 2.3` := `>=1.2.3 <2.4.0`
+* `1.2.3 - 2` := `>=1.2.3 <3.0.0`
+
+#### X-Ranges `1.2.x` `1.X` `1.2.*` `*`
+
+Any of `X`, `x`, or `*` may be used to "stand in" for one of the
+numeric values in the `[major, minor, patch]` tuple.
+
+* `*` := `>=0.0.0` (Any version satisfies)
+* `1.x` := `>=1.0.0 <2.0.0` (Matching major version)
+* `1.2.x` := `>=1.2.0 <1.3.0` (Matching major and minor versions)
+
+A partial version range is treated as an X-Range, so the special
+character is in fact optional.
+
+* `""` (empty string) := `*` := `>=0.0.0`
+* `1` := `1.x.x` := `>=1.0.0 <2.0.0`
+* `1.2` := `1.2.x` := `>=1.2.0 <1.3.0`
+
+#### Tilde Ranges `~1.2.3` `~1.2` `~1`
+
+Allows patch-level changes if a minor version is specified on the
+comparator. Allows minor-level changes if not.
+
+* `~1.2.3` := `>=1.2.3 <1.(2+1).0` := `>=1.2.3 <1.3.0`
+* `~1.2` := `>=1.2.0 <1.(2+1).0` := `>=1.2.0 <1.3.0` (Same as `1.2.x`)
+* `~1` := `>=1.0.0 <(1+1).0.0` := `>=1.0.0 <2.0.0` (Same as `1.x`)
+* `~0.2.3` := `>=0.2.3 <0.(2+1).0` := `>=0.2.3 <0.3.0`
+* `~0.2` := `>=0.2.0 <0.(2+1).0` := `>=0.2.0 <0.3.0` (Same as `0.2.x`)
+* `~0` := `>=0.0.0 <(0+1).0.0` := `>=0.0.0 <1.0.0` (Same as `0.x`)
+* `~1.2.3-beta.2` := `>=1.2.3-beta.2 <1.3.0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `1.2.4-beta.2` would not, because it is a prerelease of a
+ different `[major, minor, patch]` tuple.
+
+#### Caret Ranges `^1.2.3` `^0.2.5` `^0.0.4`
+
+Allows changes that do not modify the left-most non-zero digit in the
+`[major, minor, patch]` tuple. In other words, this allows patch and
+minor updates for versions `1.0.0` and above, patch updates for
+versions `0.X >=0.1.0`, and *no* updates for versions `0.0.X`.
+
+Many authors treat a `0.x` version as if the `x` were the major
+"breaking-change" indicator.
+
+Caret ranges are ideal when an author may make breaking changes
+between `0.2.4` and `0.3.0` releases, which is a common practice.
+However, it presumes that there will *not* be breaking changes between
+`0.2.4` and `0.2.5`. It allows for changes that are presumed to be
+additive (but non-breaking), according to commonly observed practices.
+
+* `^1.2.3` := `>=1.2.3 <2.0.0`
+* `^0.2.3` := `>=0.2.3 <0.3.0`
+* `^0.0.3` := `>=0.0.3 <0.0.4`
+* `^1.2.3-beta.2` := `>=1.2.3-beta.2 <2.0.0` Note that prereleases in
+ the `1.2.3` version will be allowed, if they are greater than or
+ equal to `beta.2`. So, `1.2.3-beta.4` would be allowed, but
+ `1.2.4-beta.2` would not, because it is a prerelease of a
+ different `[major, minor, patch]` tuple.
+* `^0.0.3-beta` := `>=0.0.3-beta <0.0.4` Note that prereleases in the
+ `0.0.3` version *only* will be allowed, if they are greater than or
+ equal to `beta`. So, `0.0.3-pr.2` would be allowed.
+
+When parsing caret ranges, a missing `patch` value desugars to the
+number `0`, but will allow flexibility within that value, even if the
+major and minor versions are both `0`.
+
+* `^1.2.x` := `>=1.2.0 <2.0.0`
+* `^0.0.x` := `>=0.0.0 <0.1.0`
+* `^0.0` := `>=0.0.0 <0.1.0`
+
+A missing `minor` and `patch` values will desugar to zero, but also
+allow flexibility within those values, even if the major version is
+zero.
+
+* `^1.x` := `>=1.0.0 <2.0.0`
+* `^0.x` := `>=0.0.0 <1.0.0`
+
+## 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`, `premajor`, `minor`, `preminor`, `patch`,
+ `prepatch`, or `prerelease`), or null if it's not valid
+ * `premajor` in one call will bump the version up to the next major
+ version and down to a prerelease of that major version.
+ `preminor`, and `prepatch` work the same way.
+ * If called from a non-prerelease version, the `prerelease` will work the
+ same as `prepatch`. It increments the patch version, then makes a
+ prerelease. If the input version is already a prerelease it simply
+ increments it.
+* `major(v)`: Return the major version number.
+* `minor(v)`: Return the minor version number.
+* `patch(v)`: Return the patch version number.
+
+### 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()`.
+* `diff(v1, v2)`: Returns difference between two versions by the release type
+ (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
+ or null if the versions are the same.
+
+
+### 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/node_modules/semver/bin/semver b/node_modules/semver/bin/semver
new file mode 100755
index 0000000..c5f2e85
--- /dev/null
+++ b/node_modules/semver/bin/semver
@@ -0,0 +1,133 @@
+#!/usr/bin/env node
+// Standalone semver comparison program.
+// Exits successfully and prints matching version(s) if
+// any supplied version is valid and passes all tests.
+
+var argv = process.argv.slice(2)
+ , versions = []
+ , range = []
+ , gt = []
+ , lt = []
+ , eq = []
+ , inc = null
+ , version = require("../package.json").version
+ , loose = false
+ , identifier = undefined
+ , semver = require("../semver")
+ , reverse = false
+
+main()
+
+function main () {
+ if (!argv.length) return help()
+ while (argv.length) {
+ 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":
+ case "premajor": case "preminor": case "prepatch":
+ inc = argv.shift()
+ break
+ default:
+ inc = "patch"
+ break
+ }
+ break
+ case "--preid":
+ identifier = argv.shift()
+ break
+ case "-r": case "--range":
+ range.push(argv.shift())
+ break
+ case "-h": case "--help": case "-?":
+ return help()
+ default:
+ versions.push(a)
+ break
+ }
+ }
+
+ 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], 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 () {
+ 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, identifier) : v
+ }).forEach(function (v,i,_) { console.log(v) })
+}
+
+function help () {
+ console.log(["SemVer " + version
+ ,""
+ ,"A JavaScript implementation of the http://semver.org/ specification"
+ ,"Copyright Isaac Z. Schlueter"
+ ,""
+ ,"Usage: semver [options] [ [...]]"
+ ,"Prints valid versions sorted by SemVer precedence"
+ ,""
+ ,"Options:"
+ ,"-r --range "
+ ," Print versions that match the specified range."
+ ,""
+ ,"-i --increment []"
+ ," Increment a version by the specified level. Level can"
+ ," be one of: major, minor, patch, premajor, preminor,"
+ ," prepatch, or prerelease. Default level is 'patch'."
+ ," Only one version may be specified."
+ ,""
+ ,"--preid "
+ ," Identifier to be used to prefix premajor, preminor,"
+ ," prepatch or prerelease version increments."
+ ,""
+ ,"-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 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/node_modules/semver/foot.js.txt b/node_modules/semver/foot.js.txt
new file mode 100644
index 0000000..8f83c20
--- /dev/null
+++ b/node_modules/semver/foot.js.txt
@@ -0,0 +1,6 @@
+
+})(
+ typeof exports === 'object' ? exports :
+ typeof define === 'function' && define.amd ? {} :
+ semver = {}
+);
diff --git a/node_modules/semver/head.js.txt b/node_modules/semver/head.js.txt
new file mode 100644
index 0000000..6536865
--- /dev/null
+++ b/node_modules/semver/head.js.txt
@@ -0,0 +1,2 @@
+;(function(exports) {
+
diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json
new file mode 100644
index 0000000..a9b058a
--- /dev/null
+++ b/node_modules/semver/package.json
@@ -0,0 +1,91 @@
+{
+ "_args": [
+ [
+ {
+ "raw": "semver@4.3.2",
+ "scope": null,
+ "escapedName": "semver",
+ "name": "semver",
+ "rawSpec": "4.3.2",
+ "spec": "4.3.2",
+ "type": "version"
+ },
+ "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/pg"
+ ]
+ ],
+ "_from": "semver@4.3.2",
+ "_id": "semver@4.3.2",
+ "_inCache": true,
+ "_location": "/semver",
+ "_nodeVersion": "1.4.2",
+ "_npmUser": {
+ "name": "isaacs",
+ "email": "isaacs@npmjs.com"
+ },
+ "_npmVersion": "2.7.4",
+ "_phantomChildren": {},
+ "_requested": {
+ "raw": "semver@4.3.2",
+ "scope": null,
+ "escapedName": "semver",
+ "name": "semver",
+ "rawSpec": "4.3.2",
+ "spec": "4.3.2",
+ "type": "version"
+ },
+ "_requiredBy": [
+ "/gulp",
+ "/normalize-package-data",
+ "/pg"
+ ],
+ "_resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz",
+ "_shasum": "c7a07158a80bedd052355b770d82d6640f803be7",
+ "_shrinkwrap": null,
+ "_spec": "semver@4.3.2",
+ "_where": "/home/ridho/Desktop/HACTIV8/phase-2/week-1/day-1/api-basic/node_modules/pg",
+ "bin": {
+ "semver": "./bin/semver"
+ },
+ "browser": "semver.browser.js",
+ "bugs": {
+ "url": "https://github.com/npm/node-semver/issues"
+ },
+ "dependencies": {},
+ "description": "The semantic version parser used by npm.",
+ "devDependencies": {
+ "tap": "0.x >=0.0.4",
+ "uglify-js": "~2.3.6"
+ },
+ "directories": {},
+ "dist": {
+ "shasum": "c7a07158a80bedd052355b770d82d6640f803be7",
+ "tarball": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz"
+ },
+ "gitHead": "22e583cc12d21b80bd7175b64ebe55890aa34e46",
+ "homepage": "https://github.com/npm/node-semver",
+ "license": "BSD",
+ "main": "semver.js",
+ "maintainers": [
+ {
+ "name": "isaacs",
+ "email": "i@izs.me"
+ },
+ {
+ "name": "othiym23",
+ "email": "ogd@aoaioxxysz.net"
+ }
+ ],
+ "min": "semver.min.js",
+ "name": "semver",
+ "optionalDependencies": {},
+ "readme": "ERROR: No README data found!",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/npm/node-semver.git"
+ },
+ "scripts": {
+ "prepublish": "make",
+ "test": "tap test/*.js"
+ },
+ "version": "4.3.2"
+}
diff --git a/node_modules/semver/semver.browser.js b/node_modules/semver/semver.browser.js
new file mode 100644
index 0000000..250885a
--- /dev/null
+++ b/node_modules/semver/semver.browser.js
@@ -0,0 +1,1187 @@
+;(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';
+
+var MAX_LENGTH = 256;
+var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
+
+// 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] + ')?' +
+ src[BUILD] + '?' +
+ ')?)?';
+
+var XRANGEPLAINLOOSE = R++;
+src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
+ '(?:' + src[PRERELEASELOOSE] + ')?' +
+ src[BUILD] + '?' +
+ ')?)?';
+
+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) {
+ if (version.length > MAX_LENGTH)
+ return null;
+
+ var r = loose ? re[LOOSE] : re[FULL];
+ if (!r.test(version))
+ return null;
+
+ try {
+ return new SemVer(version, loose);
+ } catch (er) {
+ return 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.trim().replace(/^[=v]+/, ''), 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;
+ } else if (typeof version !== 'string') {
+ throw new TypeError('Invalid Version: ' + version);
+ }
+
+ if (version.length > MAX_LENGTH)
+ throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
+
+ 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];
+
+ if (this.major > MAX_SAFE_INTEGER || this.major < 0)
+ throw new TypeError('Invalid major version')
+
+ if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
+ throw new TypeError('Invalid minor version')
+
+ if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
+ throw new TypeError('Invalid patch version')
+
+ // 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.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.length && !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);
+};
+
+// preminor will bump the version up to the next minor release, and immediately
+// down to pre-release. premajor and prepatch work the same way.
+SemVer.prototype.inc = function(release, identifier) {
+ switch (release) {
+ case 'premajor':
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor = 0;
+ this.major++;
+ this.inc('pre', identifier);
+ break;
+ case 'preminor':
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor++;
+ this.inc('pre', identifier);
+ break;
+ case 'prepatch':
+ // If this is already a prerelease, it will bump to the next version
+ // drop any prereleases that might already exist, since they are not
+ // relevant at this point.
+ this.prerelease.length = 0;
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
+ break;
+ // If the input is a non-prerelease version, this acts the same as
+ // prepatch.
+ case 'prerelease':
+ if (this.prerelease.length === 0)
+ this.inc('patch', identifier);
+ this.inc('pre', identifier);
+ break;
+
+ case 'major':
+ // If this is a pre-major version, bump up to the same major version.
+ // Otherwise increment major.
+ // 1.0.0-5 bumps to 1.0.0
+ // 1.1.0 bumps to 2.0.0
+ if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
+ this.major++;
+ this.minor = 0;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
+ case 'minor':
+ // If this is a pre-minor version, bump up to the same minor version.
+ // Otherwise increment minor.
+ // 1.2.0-5 bumps to 1.2.0
+ // 1.2.1 bumps to 1.3.0
+ if (this.patch !== 0 || this.prerelease.length === 0)
+ this.minor++;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
+ case 'patch':
+ // If this is not a pre-release version, it will increment the patch.
+ // If it is a pre-release it will bump up to the same patch version.
+ // 1.2.0-5 patches to 1.2.0
+ // 1.2.0 patches to 1.2.1
+ if (this.prerelease.length === 0)
+ this.patch++;
+ this.prerelease = [];
+ break;
+ // This probably shouldn't be used publicly.
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+ case 'pre':
+ 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);
+ }
+ if (identifier) {
+ // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
+ // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
+ if (this.prerelease[0] === identifier) {
+ if (isNaN(this.prerelease[1]))
+ this.prerelease = [identifier, 0];
+ } else
+ this.prerelease = [identifier, 0];
+ }
+ break;
+
+ default:
+ throw new Error('invalid increment argument: ' + release);
+ }
+ this.format();
+ return this;
+};
+
+exports.inc = inc;
+function inc(version, release, loose, identifier) {
+ if (typeof(loose) === 'string') {
+ identifier = loose;
+ loose = undefined;
+ }
+
+ try {
+ return new SemVer(version, loose).inc(release, identifier).version;
+ } catch (er) {
+ return null;
+ }
+}
+
+exports.diff = diff;
+function diff(version1, version2) {
+ if (eq(version1, version2)) {
+ return null;
+ } else {
+ var v1 = parse(version1);
+ var v2 = parse(version2);
+ if (v1.prerelease.length || v2.prerelease.length) {
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return 'pre'+key;
+ }
+ }
+ }
+ return 'prerelease';
+ }
+ for (var key in v1) {
+ if (key === 'major' || key === 'minor' || key === 'patch') {
+ if (v1[key] !== v2[key]) {
+ return key;
+ }
+ }
+ }
+ }
+}
+
+exports.compareIdentifiers = compareIdentifiers;
+
+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.major = major;
+function major(a, loose) {
+ return new SemVer(a, loose).major;
+}
+
+exports.minor = minor;
+function minor(a, loose) {
+ return new SemVer(a, loose).minor;
+}
+
+exports.patch = patch;
+function patch(a, loose) {
+ return new SemVer(a, loose).patch;
+}
+
+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 '===':
+ if (typeof a === 'object') a = a.version;
+ if (typeof b === 'object') b = b.version;
+ ret = a === b;
+ break;
+ case '!==':
+ if (typeof a === 'object') a = a.version;
+ if (typeof b === 'object') b = b.version;
+ 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 (this.operator === '=')
+ this.operator = '';
+
+ // if it literally is just '>' or '' then allow anything.
+ if (!m[2])
+ this.semver = ANY;
+ else
+ this.semver = new SemVer(m[2], this.loose);
+};
+
+Comparator.prototype.inspect = function() {
+ return '';
+};
+
+Comparator.prototype.toString = function() {
+ return this.value;
+};
+
+Comparator.prototype.test = function(version) {
+ ;
+
+ if (this.semver === ANY)
+ return true;
+
+ if (typeof version === 'string')
+ version = new SemVer(version, this.loose);
+
+ return 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 '';
+};
+
+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 <' + (+M + 1) + '.0.0';
+ else if (isX(p))
+ // ~1.2 == >=1.2.0- <1.3.0-
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
+ else if (pr) {
+ ;
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0';
+ } else
+ // ~1.2.3 == >=1.2.3 <1.3.0
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.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 <' + (+M + 1) + '.0.0';
+ else if (isX(p)) {
+ if (M === '0')
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
+ else
+ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
+ } else if (pr) {
+ ;
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ if (M === '0') {
+ if (m === '0')
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + m + '.' + (+p + 1);
+ else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + (+M + 1) + '.0.0';
+ } else {
+ ;
+ if (M === '0') {
+ if (m === '0')
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + m + '.' + (+p + 1);
+ else
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.0';
+ } else
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + (+M + 1) + '.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 (xM) {
+ if (gtlt === '>' || gtlt === '<') {
+ // nothing is allowed
+ ret = '<0.0.0';
+ } else {
+ // nothing is forbidden
+ ret = '*';
+ }
+ } else if (gtlt && anyX) {
+ // replace X with 0
+ if (xm)
+ m = 0;
+ if (xp)
+ p = 0;
+
+ if (gtlt === '>') {
+ // >1 => >=2.0.0
+ // >1.2 => >=1.3.0
+ // >1.2.3 => >= 1.2.4
+ gtlt = '>=';
+ if (xm) {
+ M = +M + 1;
+ m = 0;
+ p = 0;
+ } else if (xp) {
+ m = +m + 1;
+ p = 0;
+ }
+ } else if (gtlt === '<=') {
+ // <=0.7.x is actually <0.8.0, since any 0.7.x should
+ // pass. Similarly, <=7.x is actually <8.0.0, etc.
+ gtlt = '<'
+ if (xm)
+ M = +M + 1
+ else
+ m = +m + 1
+ }
+
+ ret = gtlt + M + '.' + m + '.' + p;
+ } else if (xm) {
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
+ } else if (xp) {
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.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 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.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';
+ else if (isX(fp))
+ from = '>=' + fM + '.' + fm + '.0';
+ else
+ from = '>=' + from;
+
+ if (isX(tM))
+ to = '';
+ else if (isX(tm))
+ to = '<' + (+tM + 1) + '.0.0';
+ else if (isX(tp))
+ to = '<' + tM + '.' + (+tm + 1) + '.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;
+
+ if (typeof version === 'string')
+ version = new SemVer(version, this.loose);
+
+ 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;
+ }
+
+ if (version.prerelease.length) {
+ // Find the set of versions that are allowed to have prereleases
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+ // That should allow `1.2.3-pr.2` to pass.
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
+ // even though it's within the range set by the comparators.
+ for (var i = 0; i < set.length; i++) {
+ ;
+ if (set[i].semver === ANY)
+ return true;
+
+ if (set[i].semver.prerelease.length > 0) {
+ var allowed = set[i].semver;
+ if (allowed.major === version.major &&
+ allowed.minor === version.minor &&
+ allowed.patch === version.patch)
+ return true;
+ }
+ }
+
+ // Version has a -pre, but it's not one of the ones we like.
+ 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/node_modules/semver/semver.browser.js.gz b/node_modules/semver/semver.browser.js.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6a8cf09559b126dbaa32606c11ae43c302a9d1b5
GIT binary patch
literal 7938
zcmV+dAN}ATiwFR$u@qGT1KmAqa~n63-}NhCtt%uglBVSNc4LWBDT$K!%934@vgKV{
ziihNgnwXqnW`=qsl7IX41CPc$NXl_`tL|=Nia?{$=ocD51Ke(2%;RAmC2=#nnI&nS
zwbUPLYfqml{;KlJPz@(RmZ|7MU56@2Llwm;P)Erq>`bDMp~`NvJe+pd0HB%Q&cftE
zO_R}l5~_Z`uNukV*Kn9O)K_2W;;!zAs!gwJO4;HPoH_}o{|wV@BJ30>8ij-TSQ*k)
zltJU+WIhT
z|HHvAFONG^D;j+$FZJ^_G(n^_7x
z1MUD@f>;egHP1jq7fGt}kbRIC%0$yuI4X~x3+
z+ux8QVHyq9%Moe>$Unu3eT8j7H9zz|v=wv~s5pr`zlUj}M$s6=%d`S1gIh(#05nZt
z
z^6K^LlY@nr2!hbP>jAP2R1`B{7)M+==zo`o(e}m}s7aXTz)S$Tyq#T!F|!(!IW|l{
zM1+7r0fWJ08(HSOK3dG5ih3Fo^5$L8`F+3h@6MV21BTf-dm_ep7=ZuzCrh0bEDd2;
zN#4mq(2XF6F&REYmJf!u!~K^>&e|+VqL?UYHq?fyk>!SJwBEn(0t7g%(*OOHO`Th?
z)Rt7HShr+28fGzJ%c%R(NE+Kl*l*IX1KvCgve3x9WYJ||3(GE7YDIW+d~kg5>R|um
zpjt_*>Y0~&FBXZZcIY(xJKMC<2BeUy2q;Or7HBD{hTRM4eGt+0BEy=Wv|o{aCy7Jn
zmplWW2_#nzN!gwq1FG3#_|UP6S1s5oK43f6=S2-+^iNt9Qd=M^PePr&g`_Q$(+Wfi
z%hHsxq`sX;laV?M^8n`8plDa|Ed(snK@X^kTfp4CN3^AjqUCyTU|p(ncKq&|SRCF)W6tNepPF
z!LJGUN{El~V;1DYOC4ef)LBR|b_NQ7Xt1##a?z4t7|ilHeH*9Ae3o?;1%5su7-+{3
zFOx6|E!q$Q4g-h*F~rU;lR30Q*bq9i(V^oDVMwMR>nNj$9;Nxizt?VVdu6Ucr2b
z^1RwJvhn8nvRxJZ2S{$OQ3I#dg+M^EScILD0-a-jjs$>ttW}&=O&1`381x+2fdbCd
z)n<3A`;7SCr$5{3`Z5|`f@UYM;s6J!vIJNeO+!#$Kod-|q^&k_y%0=hm%*lLg5ZqY
zuA>~d$kJvbZE1WU1%S)*Tg}8NuApK9jAv6^4n!c?+b;2te1~P?yQ}{D_Zfs^WmeYv
zsY>5h$JHvfS~{eqIv+}m7IYd;W3wMmU!BTU_?^ug>~-gEx3$;bGam5-xqFEkNdj8m
z>ONUV_p*-CxLNP|Ry_d~
zlxDc745x?*?P-`pRT};_hehm&Mez1`|LDg>K|mz{j&ezyb$4_3_U`?Avm7a+S=2=>
z_99||*=SJ#DHWed?Xpg{+$+Tzb}oO{{8m2CFJAE#Dx?VKFS8c`P9+bYN%
z3(Q1w3bSvhQuIqaWgKdc1kPqXg=qrfi2?W#!!Nr0N~!hO|jEGIyePh6&$ZF
zG-1-G-8~!rQpM@<%R|}17IF(Dzh&qb*mz_Z2d1IlCJwK0=jh;O*7WhURb$*}F*|b{
z>}eWJkHgs{7~)n{tD`Lo?K_C4@;ae`q;PuADNGmy
z!;jZNI?6Z{%A>)A=Y1!=@Ai)mPK(l`LKozoTj^0nQF^wpMtT~XCq1uCL3*xEN^gjx
zE=lj)qpU<#na!4%MbaanlJs2Z>S)W-!wp8=ck|e|J`*iBoXHb6I
z0GL5Y>xav5_z{+7!5CJppxz<4ADTl#9nPZSGa5%RVWgE1PBMW&HI`-3SCo&{L`|n*N32dV%Hgh%#zg>>lTk=)hKA$i0X&+fF7P0w|0`_SrE-h
zFzsaEyKohG$pnSYmBpVUm!(^QgFI6*4TZMLn5g;U6cy-+8RkC0UeXnE-j_}GbvWf!T
z-4%@fs%v(mUg++jYuon_f~6QR(WmH}zSs7h75najC!01~-ITp-^Xd7!{?*yWQ}D-)
zRs~@h5SCRDX3u{4>{1+TThgleUQ`!_&NhgLc-YP@j3_*vA{D`7cE+M@-LQ|Lwy89n
zWTCD$UG(jNxq!SUNF~nt4frEG?B^}Ph9M@uOu;vxI-LUWL7FCMv+*)!mC$>iFBJMH
zqoJ%mtJ+2-e#@c^h7BHzS2Wa%I8O)n2a^}fM?>7pZnR9FkD8nlP~vZERSVHx1ko4?
zaNV}nuc=_I)~qR7RCAF@Gh(7}+WKtf8oJWp+7Us;ytkWih6lS}@bEF^6=bFv?HEJD
zjp@71GdoDyK<3gdS4#WIT>9+H5--r~s;YDa0kETbD~yz3^-!D~1!apmB7hY;BG~GV
zc(4mPVt~~;Vpy*ukPeF?y11oaTI}??BhJif$h)u4Oh?$c1LhnJVee%CY~0OelPGUC
zx((FLnadK2M#i?SEucH3WQ500dA0$V7HIJX4CRGFpO3)zLi_kw0DF3V27ve>I)p~=
zoEl-M801Z!YT4v~+$2xX{peaiWeH^RsHt;gLaD&+>6Au@-zy^KZ+o(}%+ZcWaMpCO
z0lu%}aJUw~CQ(eI64Qfh3B%g17#Fyo8H7CLfoT+t9X*Atn@({Q>${B_e0jnrOtlDC
zpo!!6P@+gM*e?W5Tv+QsxwbDoC>6DZ!(>&Flf59QSXuP%^pVsMi_+__DqHa-j}CY;Bk@FI#~odo0!{Gvjr*mFT5Ay^E(S%3}}LU*dc
z2L^1IfFj59uoS1(8(7eW<{YhFU*d|gxv>#xbq93=-mv4pj&L7iKAm~T+VdH%KQYSRw=mT}0)UT8DBX5obQ&^b>x7{k=
zKa_@Ndv@syY=#*uY;hT;0nEHSM9XQI?i(*Ow`w%AZ)97D+Wb-z;T1};16n&rP*)vr?#%&>fSlU{Q_I
zWLAjZGTwZfM&rxe;ty}4EN^47>X3KbC@hbY+@ZqeS3#UB+PT9+eF!!3?!)-V+@S$i
z^5XV(9v!(MYUt7EA}|LwYScFMi?C
z3bK4NE2s4T;cBi977kmKFZvx$~trY&oPRxL0AJexT4&N#s+!Pc@|{jt%NK1
zPW53O=X=Ha&Chcigr&&mr5vTybjr0#26W2KS#5D6xA|u9Ngf*0V#S`0Ni0Yl75j%-a@D2Vk8}
zq;|10fkMe`#Bx~6*N1r9qv5wx72r-l8aEKv*^*`VYvsR?f{1$RY_@2Ijz~mKmCeb<
zT5adu**v>!_Us&SFBo48+6pQ>2=l=A5VmxyT?2lRB!kKCc&_FOD>3xEQ5HGYV+L0f
zsEN;xf}>Ky&9hc(kt|ScWG=o_A+vqF_8D#OD<)uAPz3Wy?qWx?sirs7BE6v|gqe=#
z_y_Ncn#h?qol6@|-WCL}9?S+l$LR2{I8?yE!Ma2n8`4U*9K1WtZ|WWXe#QQ|YbE!P
zl``APc1>ls%^z@cZdef6!siD7v@+y6{7A2EUr#H`~UaZ#hnczg1P&btqjC
zofT~s4{SDDZcTi(Rjl1=xux*cW`$dXY4~cZVySKo#GWF4gvcDTk~gLCAYQB>iE?;|
zC|wbSEnX2%yk!f#+I$BvXA~Y>ZPDLFPiS@o(dBOdz+#VgzgB8xf@-}_yS8kAUu1YI
z4Nep34ay(LeNh3+y8(FoS1Q!U_Gat6uiPHCJSME!TCgXD0U*FlE=I$<-$Bcq^9(9#
z2ksn)8spXre426N2G2&oqs7gfje)gnv)gW(J>qtIFmb6Dj%m$-sSk9$R~@JwKwNAT
zs9h@c3VYs>Wm?JEw2HNsf9XO7*6-g8+A8qR*3H2aeTp9FJK_|_q-Dov>$|$W#H`mP
z^eHjp_lIES_Fg^!hvND~LF5DAS>NiIb^EfCJIyZZEb)2eE=;3AtE!(@dbW{Y%RN$Y
zt#~y(c{&eUm3k$VsX~Klhhr%Rm2pR~0)K|L*!v1U1YZ2woX{Ri87G!gJ9q5mhGn4&
zO!6osqb-b66OtAvNxvW|>58G7
zXVQSDGi;U2ikSHUfP7nQHYYQGpBb3!FEn{I7kFnW!ed@^
zU!xw>?qNLoFHrPoAw`WBhFR_}{F7T3^l!UrL>4$+4!vuE3r1Z9+ZVv$GUy!(JXwl)
zr!RmPU^Yv*#TgOFETqIyUbcY_niZSYeNs}P<=?qf)4pVu)A6EwtOiL!nZKY|lp7;*9yMiF)pJv(Gti!5O8OoAfA-{Q
zA@?n126&;j^P_@xoz=;+6bq)+y@+5UOdYnN!9j
zRX7tN5_K!7j@vpQ0DUW515$LGieDXoC4;^j#P}}@cMZz7SzZ*1&&mXt#Q95bQ~Vf#
zzOdvGrEhn^QV>6%YqE417u8}e-==C;Uy;&1>MlRo3uVyNCw-r6K_Bw!Y4O6TO=tUX
zF0r03$11Nx7B50ttTC$nB>Eknql5CSgwXo0ji)WA&!+jl%o1tS`Jwjke0_8hVmgyT
zRhi<|nRv9O(@ZcQB~S3slD#anPXurAEfrQ3EIST;by+zQD|=$H#*+CKte0%0HUt(n
zjL0O1ykJbseH?7XdJNNK6t)++=VBbl87w>)bU!7pFNRcnf_mt?7*6}d)|q~9CXFb)>*(SrQb|S@kkp~K|NZ&o)HgZ*cG;rUEDl1i
zH+8>s!#pb~Mj4Ra4_F28EeUKDNW4f`4d<!~eo3BG~Oy7M0q0M#)svwA-U*J>87H?$UR^$rh$#Q4^RL+Vn3s;jc8`nI@dY
zvcq{px(PlE^hwW(4(eGEs%M~jRk+;tbFHL{dyBq#=xJt|K}z%seX}p}+GgIWUraOd
z>4g`z;H;omZq9AHcsQOICMplK0k
zw@)|F=(Y(d0)B07V8Ld~lvZJySxj2Cpx8#99WBsKeP8(3l<{+)uDH1|6}=bxo{5YQ
zxj{NhyLfSKKX3MUH@wklxP*`yZClV?m|42L3Rwh7;Dy`Bjg{#2QcA3iI38KcSe=vy
zQXv#Z?nlbG<9wmtIS0c(Cogcm$j6+MRi9V*6bC|1+makRV|CQSuu%x
zNsmG3AMP>A&Fmal;WgxwA1`dd{~NF2Wo#Vsbl4N7`URYY^7FY?!B|85{a@mE{E-*(
zPo`y-e6FjibQDv;yBUqyrLh#!;J#q5HFCOtfTR|5*jPn~Rl@u7QuvPx;6KUxhp~O>
z6jbz+RRO#8l+yQoj_+pV4|m=b?Fhd-EpuC075@BfX8*pXV|(V@OgOSdJS{RUqb
zVuvmY@gNCmaN$92TvQ?LP_L_Iq6&h6w^%t7Qw2STq|bzKuN`5GWpJH26k_FQv4?Otdk(VoEXeRh;FD+?O@ed+5%5mGgzX>5_qGc2
zVYkG@oko#`l?<$N?v5i?4ZSFfx~Xx+rRYS;?=yn58o_;mSj^4>3s)lF>Sw&3Aour=
zzVC!1wlF+b(r-91h5S65+jXK}*K&ke_Mk^-5RVH$!O;Z7U-tn1(wJ~BN8z#mbr#;_`RRJ{%nJMQ!n
z6+Pc$_(FGeE;G!FTNC)lhosVvR3wsE&Hp{kr?yI1^f3
z^{Gfh(3uPrco5IJ&*1~#V@J>%zAZIMJf!6Yj^W;cOY?EBUH9Y{{$dVHh%lB5{G8!`
zI71F