From 2daef3ad4bef9c4a426df029e283195e13e29079 Mon Sep 17 00:00:00 2001 From: Junaid Kapadia Date: Fri, 14 Oct 2016 01:19:48 -0700 Subject: [PATCH 1/4] Pushing Skyfit code-challenge submission --- README.md | 16 + code-challenge/app.js | 60 + code-challenge/bin/www | 90 + code-challenge/github | 1 + code-challenge/node_modules/.bin/_mocha | 1 + code-challenge/node_modules/.bin/acorn | 1 + code-challenge/node_modules/.bin/cleancss | 1 + code-challenge/node_modules/.bin/jade | 1 + code-challenge/node_modules/.bin/mime | 1 + code-challenge/node_modules/.bin/mkdirp | 1 + code-challenge/node_modules/.bin/mocha | 1 + code-challenge/node_modules/.bin/uglifyjs | 1 + .../node_modules/accepts/HISTORY.md | 170 + code-challenge/node_modules/accepts/LICENSE | 23 + code-challenge/node_modules/accepts/README.md | 135 + code-challenge/node_modules/accepts/index.js | 231 + .../node_modules/accepts/package.json | 132 + .../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 | 101 + .../node_modules/acorn/.editorconfig | 7 + .../node_modules/acorn/.gitattributes | 1 + code-challenge/node_modules/acorn/.npmignore | 3 + .../node_modules/acorn/.tern-project | 6 + code-challenge/node_modules/acorn/.travis.yml | 6 + code-challenge/node_modules/acorn/AUTHORS | 43 + code-challenge/node_modules/acorn/LICENSE | 19 + code-challenge/node_modules/acorn/README.md | 396 + code-challenge/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 + code-challenge/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 | 223 + .../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 + .../acorn/src/loose/acorn_loose.js | 0 .../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 + code-challenge/node_modules/acorn/src/lval.js | 215 + code-challenge/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 + code-challenge/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 | 118 + code-challenge/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 | 84 + .../node_modules/array-flatten/LICENSE | 21 + .../node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 97 + code-challenge/node_modules/asap/LICENSE.md | 20 + code-challenge/node_modules/asap/README.md | 81 + code-challenge/node_modules/asap/asap.js | 113 + code-challenge/node_modules/asap/package.json | 74 + code-challenge/node_modules/async/LICENSE | 19 + code-challenge/node_modules/async/README.md | 1425 + .../node_modules/async/component.json | 11 + .../node_modules/async/lib/async.js | 958 + .../node_modules/async/package.json | 95 + .../node_modules/axios/CHANGELOG.md | 135 + .../node_modules/axios/CODE_OF_CONDUCT.md | 74 + .../node_modules/axios/COLLABORATOR_GUIDE.md | 23 + code-challenge/node_modules/axios/LICENSE | 19 + code-challenge/node_modules/axios/README.md | 432 + .../node_modules/axios/UPGRADE_GUIDE.md | 44 + code-challenge/node_modules/axios/axios.d.ts | 65 + .../node_modules/axios/component.json | 1 + .../node_modules/axios/dist/axios.js | 1191 + .../node_modules/axios/dist/axios.map | 1 + .../node_modules/axios/dist/axios.min.js | 3 + .../node_modules/axios/dist/axios.min.map | 1 + .../node_modules/axios/http_proxy.txt | 29 + code-challenge/node_modules/axios/index.js | 1 + .../node_modules/axios/lib/adapters/http.js | 151 + .../node_modules/axios/lib/adapters/xhr.js | 172 + .../node_modules/axios/lib/axios.js | 119 + .../axios/lib/core/InterceptorManager.js | 52 + .../axios/lib/core/dispatchRequest.js | 34 + .../node_modules/axios/lib/defaults.js | 65 + .../node_modules/axios/lib/helpers/bind.js | 11 + .../node_modules/axios/lib/helpers/btoa.js | 36 + .../axios/lib/helpers/buildURL.js | 67 + .../axios/lib/helpers/combineURLs.js | 12 + .../node_modules/axios/lib/helpers/cookies.js | 53 + .../axios/lib/helpers/deprecatedMethod.js | 24 + .../axios/lib/helpers/isAbsoluteURL.js | 14 + .../axios/lib/helpers/isURLSameOrigin.js | 68 + .../axios/lib/helpers/parseHeaders.js | 37 + .../node_modules/axios/lib/helpers/spread.js | 27 + .../axios/lib/helpers/transformData.js | 20 + .../node_modules/axios/lib/utils.js | 244 + .../node_modules/axios/package.json | 140 + .../node_modules/axios/sauce_connect.log | 29201 ++++++++++++++++ .../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 | 111 + .../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 | 111 + code-challenge/node_modules/bluebird/LICENSE | 21 + .../node_modules/bluebird/README.md | 51 + .../node_modules/bluebird/changelog.md | 1 + .../bluebird/js/browser/bluebird.core.js | 3756 ++ .../bluebird/js/browser/bluebird.core.min.js | 31 + .../bluebird/js/browser/bluebird.js | 5598 +++ .../bluebird/js/browser/bluebird.min.js | 31 + .../node_modules/bluebird/js/release/any.js | 21 + .../bluebird/js/release/assert.js | 55 + .../node_modules/bluebird/js/release/async.js | 166 + .../node_modules/bluebird/js/release/bind.js | 67 + .../bluebird/js/release/bluebird.js | 11 + .../bluebird/js/release/call_get.js | 123 + .../bluebird/js/release/cancel.js | 129 + .../bluebird/js/release/catch_filter.js | 42 + .../bluebird/js/release/context.js | 69 + .../bluebird/js/release/debuggability.js | 915 + .../bluebird/js/release/direct_resolve.js | 46 + .../node_modules/bluebird/js/release/each.js | 30 + .../bluebird/js/release/errors.js | 116 + .../node_modules/bluebird/js/release/es5.js | 80 + .../bluebird/js/release/filter.js | 12 + .../bluebird/js/release/finally.js | 111 + .../bluebird/js/release/generators.js | 223 + .../node_modules/bluebird/js/release/join.js | 168 + .../node_modules/bluebird/js/release/map.js | 168 + .../bluebird/js/release/method.js | 55 + .../bluebird/js/release/nodeback.js | 51 + .../bluebird/js/release/nodeify.js | 58 + .../bluebird/js/release/promise.js | 773 + .../bluebird/js/release/promise_array.js | 184 + .../bluebird/js/release/promisify.js | 314 + .../node_modules/bluebird/js/release/props.js | 118 + .../node_modules/bluebird/js/release/queue.js | 90 + .../node_modules/bluebird/js/release/race.js | 49 + .../bluebird/js/release/reduce.js | 172 + .../bluebird/js/release/schedule.js | 61 + .../bluebird/js/release/settle.js | 43 + .../node_modules/bluebird/js/release/some.js | 148 + .../js/release/synchronous_inspection.js | 103 + .../bluebird/js/release/thenables.js | 86 + .../bluebird/js/release/timers.js | 93 + .../node_modules/bluebird/js/release/using.js | 226 + .../node_modules/bluebird/js/release/util.js | 375 + .../node_modules/bluebird/package.json | 137 + .../node_modules/body-parser/HISTORY.md | 464 + .../node_modules/body-parser/LICENSE | 23 + .../node_modules/body-parser/README.md | 409 + .../node_modules/body-parser/index.js | 157 + .../node_modules/body-parser/lib/read.js | 188 + .../body-parser/lib/types/json.js | 175 + .../node_modules/body-parser/lib/types/raw.js | 101 + .../body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 279 + .../node_modules/body-parser/package.json | 123 + .../node_modules/brace-expansion/README.md | 122 + .../node_modules/brace-expansion/index.js | 201 + .../node_modules/brace-expansion/package.json | 113 + .../node_modules/browser-stdout/.npmignore | 58 + .../node_modules/browser-stdout/README.md | 40 + .../node_modules/browser-stdout/index.js | 25 + .../node_modules/browser-stdout/package.json | 80 + .../node_modules/buffer-shims/index.js | 108 + .../node_modules/buffer-shims/package.json | 86 + .../node_modules/buffer-shims/readme.md | 21 + code-challenge/node_modules/bytes/History.md | 70 + code-challenge/node_modules/bytes/LICENSE | 23 + code-challenge/node_modules/bytes/Readme.md | 114 + code-challenge/node_modules/bytes/index.js | 157 + .../node_modules/bytes/package.json | 121 + .../node_modules/camelcase/index.js | 27 + code-challenge/node_modules/camelcase/license | 21 + .../node_modules/camelcase/package.json | 103 + .../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 | 122 + .../node_modules/center-align/utils.js | 40 + .../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 + .../character-parser/package.json | 91 + .../node_modules/clean-css/History.md | 1095 + code-challenge/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 + .../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 | 95 + .../clean-css/lib/selectors/restructure.js | 369 + .../clean-css/lib/selectors/simple.js | 444 + .../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 | 264 + .../node_modules/clean-css/lib/urls/rebase.js | 30 + .../node_modules/clean-css/lib/urls/reduce.js | 154 + .../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 + .../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 | 53 + .../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 | 109 + .../node_modules/clean-css/package.json | 124 + .../node_modules/cliui/.coveralls.yml | 1 + code-challenge/node_modules/cliui/.npmignore | 2 + code-challenge/node_modules/cliui/.travis.yml | 7 + code-challenge/node_modules/cliui/LICENSE.txt | 14 + code-challenge/node_modules/cliui/README.md | 104 + code-challenge/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 | 95 + .../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 | 123 + .../node_modules/cliui/test/cliui.js | 349 + .../node_modules/combined-stream/License | 19 + .../node_modules/combined-stream/Readme.md | 138 + .../combined-stream/lib/combined_stream.js | 188 + .../node_modules/combined-stream/package.json | 101 + .../node_modules/commander/History.md | 222 + .../node_modules/commander/Readme.md | 300 + .../node_modules/commander/index.js | 1020 + .../node_modules/commander/package.json | 107 + .../node_modules/component-emitter/LICENSE | 24 + .../node_modules/component-emitter/Readme.md | 74 + .../node_modules/component-emitter/index.js | 163 + .../component-emitter/package.json | 217 + .../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 | 118 + .../node_modules/concat-map/test/map.js | 39 + .../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 | 84 + .../node_modules/constantinople/test/index.js | 71 + .../content-disposition/HISTORY.md | 45 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 141 + .../node_modules/content-disposition/index.js | 445 + .../content-disposition/package.json | 101 + .../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 | 106 + .../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 | 115 + .../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 + .../cookie-signature/package.json | 94 + code-challenge/node_modules/cookie/HISTORY.md | 118 + code-challenge/node_modules/cookie/LICENSE | 24 + code-challenge/node_modules/cookie/README.md | 220 + code-challenge/node_modules/cookie/index.js | 195 + .../node_modules/cookie/package.json | 107 + .../node_modules/cookiejar/.npmignore | 1 + code-challenge/node_modules/cookiejar/LICENSE | 9 + .../node_modules/cookiejar/cookiejar.js | 265 + .../node_modules/cookiejar/package.json | 93 + .../node_modules/cookiejar/readme.md | 57 + .../node_modules/cookiejar/tests/test.js | 87 + .../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 | 95 + .../node_modules/core-util-is/test.js | 68 + .../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 | 75 + .../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 | 76 + code-challenge/node_modules/css/.npmignore | 4 + code-challenge/node_modules/css/History.md | 20 + code-challenge/node_modules/css/Makefile | 8 + code-challenge/node_modules/css/Readme.md | 77 + code-challenge/node_modules/css/benchmark.js | 36 + .../node_modules/css/component.json | 13 + code-challenge/node_modules/css/index.js | 3 + code-challenge/node_modules/css/package.json | 75 + code-challenge/node_modules/css/test.js | 6 + code-challenge/node_modules/debug/.jshintrc | 3 + code-challenge/node_modules/debug/.npmignore | 6 + code-challenge/node_modules/debug/History.md | 195 + code-challenge/node_modules/debug/Makefile | 36 + code-challenge/node_modules/debug/Readme.md | 188 + code-challenge/node_modules/debug/bower.json | 28 + code-challenge/node_modules/debug/browser.js | 168 + .../node_modules/debug/component.json | 19 + code-challenge/node_modules/debug/debug.js | 197 + code-challenge/node_modules/debug/node.js | 209 + .../node_modules/debug/package.json | 117 + .../node_modules/decamelize/index.js | 13 + .../node_modules/decamelize/license | 21 + .../node_modules/decamelize/package.json | 107 + .../node_modules/decamelize/readme.md | 48 + .../node_modules/delayed-stream/.npmignore | 1 + .../node_modules/delayed-stream/License | 19 + .../node_modules/delayed-stream/Makefile | 7 + .../node_modules/delayed-stream/Readme.md | 141 + .../delayed-stream/lib/delayed_stream.js | 107 + .../node_modules/delayed-stream/package.json | 98 + code-challenge/node_modules/depd/History.md | 84 + code-challenge/node_modules/depd/LICENSE | 22 + code-challenge/node_modules/depd/Readme.md | 281 + code-challenge/node_modules/depd/index.js | 521 + .../node_modules/depd/lib/browser/index.js | 79 + .../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 + code-challenge/node_modules/depd/package.json | 106 + code-challenge/node_modules/destroy/LICENSE | 22 + code-challenge/node_modules/destroy/README.md | 60 + code-challenge/node_modules/destroy/index.js | 75 + .../node_modules/destroy/package.json | 108 + code-challenge/node_modules/diff/README.md | 181 + code-challenge/node_modules/diff/diff.js | 619 + code-challenge/node_modules/diff/package.json | 97 + code-challenge/node_modules/ee-first/LICENSE | 22 + .../node_modules/ee-first/README.md | 80 + code-challenge/node_modules/ee-first/index.js | 95 + .../node_modules/ee-first/package.json | 99 + .../node_modules/es6-promise/CHANGELOG.md | 92 + .../node_modules/es6-promise/LICENSE | 19 + .../node_modules/es6-promise/README.md | 74 + .../es6-promise/dist/es6-promise.js | 1154 + .../es6-promise/dist/es6-promise.map | 1 + .../es6-promise/dist/es6-promise.min.js | 1 + .../es6-promise/dist/es6-promise.min.map | 1 + .../node_modules/es6-promise/es6-promise.d.ts | 74 + .../es6-promise/lib/es6-promise.js | 8 + .../es6-promise/lib/es6-promise/-internal.js | 270 + .../es6-promise/lib/es6-promise/asap.js | 116 + .../es6-promise/lib/es6-promise/enumerator.js | 114 + .../es6-promise/lib/es6-promise/polyfill.js | 35 + .../es6-promise/lib/es6-promise/promise.js | 383 + .../lib/es6-promise/promise/all.js | 52 + .../lib/es6-promise/promise/race.js | 84 + .../lib/es6-promise/promise/reject.js | 46 + .../lib/es6-promise/promise/resolve.js | 48 + .../es6-promise/lib/es6-promise/then.js | 32 + .../es6-promise/lib/es6-promise/utils.js | 20 + .../node_modules/es6-promise/package.json | 133 + .../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 | 96 + .../escape-string-regexp/index.js | 11 + .../escape-string-regexp/package.json | 110 + .../escape-string-regexp/readme.md | 27 + code-challenge/node_modules/etag/HISTORY.md | 71 + code-challenge/node_modules/etag/LICENSE | 22 + code-challenge/node_modules/etag/README.md | 165 + code-challenge/node_modules/etag/index.js | 132 + code-challenge/node_modules/etag/package.json | 111 + .../node_modules/express/History.md | 3062 ++ code-challenge/node_modules/express/LICENSE | 24 + code-challenge/node_modules/express/Readme.md | 138 + code-challenge/node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 643 + .../node_modules/express/lib/express.js | 103 + .../express/lib/middleware/init.js | 36 + .../express/lib/middleware/query.js | 51 + .../node_modules/express/lib/request.js | 489 + .../node_modules/express/lib/response.js | 1053 + .../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 | 300 + .../node_modules/express/lib/view.js | 173 + .../express/node_modules/cookie/HISTORY.md | 72 + .../express/node_modules/cookie/LICENSE | 24 + .../express/node_modules/cookie/README.md | 64 + .../express/node_modules/cookie/index.js | 156 + .../express/node_modules/cookie/package.json | 111 + .../express/node_modules/qs/.eslintignore | 1 + .../express/node_modules/qs/.npmignore | 19 + .../express/node_modules/qs/.travis.yml | 6 + .../express/node_modules/qs/CHANGELOG.md | 88 + .../express/node_modules/qs/CONTRIBUTING.md | 1 + .../express/node_modules/qs/LICENSE | 28 + .../express/node_modules/qs/README.md | 317 + .../express/node_modules/qs/bower.json | 22 + .../express/node_modules/qs/lib/index.js | 15 + .../express/node_modules/qs/lib/parse.js | 186 + .../express/node_modules/qs/lib/stringify.js | 121 + .../express/node_modules/qs/lib/utils.js | 190 + .../express/node_modules/qs/package.json | 91 + .../express/node_modules/qs/test/parse.js | 478 + .../express/node_modules/qs/test/stringify.js | 259 + .../express/node_modules/qs/test/utils.js | 28 + .../node_modules/express/package.json | 177 + code-challenge/node_modules/extend/.eslintrc | 192 + code-challenge/node_modules/extend/.jscs.json | 104 + code-challenge/node_modules/extend/.npmignore | 1 + .../node_modules/extend/.travis.yml | 44 + .../node_modules/extend/CHANGELOG.md | 69 + code-challenge/node_modules/extend/LICENSE | 23 + code-challenge/node_modules/extend/README.md | 62 + .../node_modules/extend/component.json | 32 + code-challenge/node_modules/extend/index.js | 86 + .../node_modules/extend/package.json | 107 + .../node_modules/finalhandler/HISTORY.md | 98 + .../node_modules/finalhandler/LICENSE | 22 + .../node_modules/finalhandler/README.md | 133 + .../node_modules/finalhandler/index.js | 151 + .../node_modules/finalhandler/package.json | 115 + .../node_modules/follow-redirects/README.md | 112 + .../node_modules/follow-redirects/create.js | 162 + .../node_modules/follow-redirects/http.js | 1 + .../node_modules/follow-redirects/https.js | 1 + .../node_modules/follow-redirects/index.js | 4 + .../follow-redirects/package.json | 124 + .../node_modules/form-data/.dockerignore | 7 + .../node_modules/form-data/.editorconfig | 10 + .../node_modules/form-data/.eslintignore | 1 + .../node_modules/form-data/.eslintrc | 64 + code-challenge/node_modules/form-data/License | 19 + .../node_modules/form-data/README.md | 218 + .../node_modules/form-data/lib/browser.js | 2 + .../node_modules/form-data/lib/form_data.js | 411 + .../node_modules/form-data/lib/populate.js | 9 + .../form-data/node_modules/async/README.md | 1877 + .../node_modules/async/dist/async.js | 1265 + .../node_modules/async/dist/async.min.js | 2 + .../form-data/node_modules/async/lib/async.js | 1265 + .../form-data/node_modules/async/package.json | 158 + .../node_modules/form-data/package.json | 138 + .../node_modules/form-data/wercker.yml | 36 + .../node_modules/formidable/.npmignore | 7 + .../node_modules/formidable/.travis.yml | 5 + .../node_modules/formidable/LICENSE | 7 + .../node_modules/formidable/Readme.md | 425 + .../node_modules/formidable/index.js | 1 + .../node_modules/formidable/lib/file.js | 72 + .../formidable/lib/incoming_form.js | 555 + .../node_modules/formidable/lib/index.js | 3 + .../formidable/lib/json_parser.js | 35 + .../formidable/lib/multipart_parser.js | 332 + .../formidable/lib/octet_parser.js | 20 + .../formidable/lib/querystring_parser.js | 27 + .../node_modules/formidable/package.json | 99 + .../node_modules/forwarded/HISTORY.md | 4 + code-challenge/node_modules/forwarded/LICENSE | 22 + .../node_modules/forwarded/README.md | 53 + .../node_modules/forwarded/index.js | 35 + .../node_modules/forwarded/package.json | 100 + code-challenge/node_modules/fresh/HISTORY.md | 38 + code-challenge/node_modules/fresh/LICENSE | 22 + code-challenge/node_modules/fresh/README.md | 58 + code-challenge/node_modules/fresh/index.js | 57 + .../node_modules/fresh/package.json | 125 + .../node_modules/fs.realpath/README.md | 33 + .../node_modules/fs.realpath/index.js | 66 + .../node_modules/fs.realpath/old.js | 303 + .../node_modules/fs.realpath/package.json | 95 + .../node_modules/github-api/CHANGELOG.md | 134 + .../node_modules/github-api/LICENSE | 25 + .../github-api/dist/GitHub.bundle.js | 7269 ++++ .../github-api/dist/GitHub.bundle.js.map | 1 + .../github-api/dist/GitHub.bundle.min.js | 4 + .../github-api/dist/GitHub.bundle.min.js.map | 1 + .../node_modules/github-api/dist/GitHub.js | 2277 ++ .../github-api/dist/GitHub.js.map | 1 + .../github-api/dist/GitHub.min.js | 3 + .../github-api/dist/GitHub.min.js.map | 1 + .../github-api/dist/components/Gist.js | 177 + .../github-api/dist/components/Gist.js.map | 1 + .../github-api/dist/components/GitHub.js | 152 + .../github-api/dist/components/GitHub.js.map | 1 + .../github-api/dist/components/Issue.js | 183 + .../github-api/dist/components/Issue.js.map | 1 + .../github-api/dist/components/Markdown.js | 113 + .../dist/components/Markdown.js.map | 1 + .../dist/components/Organization.js | 140 + .../dist/components/Organization.js.map | 1 + .../github-api/dist/components/RateLimit.js | 109 + .../dist/components/RateLimit.js.map | 1 + .../github-api/dist/components/Repository.js | 520 + .../dist/components/Repository.js.map | 1 + .../github-api/dist/components/Requestable.js | 337 + .../dist/components/Requestable.js.map | 1 + .../github-api/dist/components/Search.js | 165 + .../github-api/dist/components/Search.js.map | 1 + .../github-api/dist/components/Team.js | 175 + .../github-api/dist/components/Team.js.map | 1 + .../github-api/dist/components/User.js | 198 + .../github-api/dist/components/User.js.map | 1 + .../node_modules/github-api/lib/Gist.js | 167 + .../node_modules/github-api/lib/GitHub.js | 133 + .../node_modules/github-api/lib/Issue.js | 195 + .../node_modules/github-api/lib/Markdown.js | 39 + .../github-api/lib/Organization.js | 98 + .../node_modules/github-api/lib/RateLimit.js | 35 + .../node_modules/github-api/lib/Repository.js | 739 + .../github-api/lib/Requestable.js | 291 + .../node_modules/github-api/lib/Search.js | 102 + .../node_modules/github-api/lib/Team.js | 160 + .../node_modules/github-api/lib/User.js | 169 + .../node_modules/github-api/package.json | 183 + code-challenge/node_modules/glob/README.md | 365 + code-challenge/node_modules/glob/common.js | 235 + code-challenge/node_modules/glob/glob.js | 783 + code-challenge/node_modules/glob/package.json | 112 + code-challenge/node_modules/glob/sync.js | 468 + .../node_modules/graceful-readlink/.npmignore | 3 + .../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 + .../graceful-readlink/package.json | 85 + code-challenge/node_modules/growl/History.md | 63 + code-challenge/node_modules/growl/Readme.md | 108 + .../node_modules/growl/lib/growl.js | 290 + .../node_modules/growl/package.json | 87 + code-challenge/node_modules/growl/test.js | 31 + code-challenge/node_modules/has-flag/index.js | 10 + code-challenge/node_modules/has-flag/license | 21 + .../node_modules/has-flag/package.json | 119 + .../node_modules/has-flag/readme.md | 64 + .../node_modules/http-errors/HISTORY.md | 95 + .../node_modules/http-errors/LICENSE | 23 + .../node_modules/http-errors/README.md | 112 + .../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 | 20 + .../node_modules/iconv-lite/Changelog.md | 93 + .../node_modules/iconv-lite/LICENSE | 21 + .../node_modules/iconv-lite/README.md | 157 + .../iconv-lite/encodings/dbcs-codec.js | 554 + .../iconv-lite/encodings/dbcs-data.js | 170 + .../iconv-lite/encodings/index.js | 22 + .../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 + .../iconv-lite/encodings/utf16.js | 174 + .../node_modules/iconv-lite/encodings/utf7.js | 289 + .../iconv-lite/lib/bom-handling.js | 52 + .../iconv-lite/lib/extend-node.js | 214 + .../node_modules/iconv-lite/lib/index.js | 141 + .../node_modules/iconv-lite/lib/streams.js | 120 + .../node_modules/iconv-lite/package.json | 155 + code-challenge/node_modules/inflight/LICENSE | 15 + .../node_modules/inflight/README.md | 37 + .../node_modules/inflight/inflight.js | 54 + .../node_modules/inflight/package.json | 106 + code-challenge/node_modules/inherits/LICENSE | 16 + .../node_modules/inherits/README.md | 42 + .../node_modules/inherits/inherits.js | 1 + .../node_modules/inherits/inherits_browser.js | 23 + .../node_modules/inherits/package.json | 90 + code-challenge/node_modules/inherits/test.js | 25 + .../node_modules/ipaddr.js/.npmignore | 2 + .../node_modules/ipaddr.js/.travis.yml | 10 + .../node_modules/ipaddr.js/Cakefile | 18 + code-challenge/node_modules/ipaddr.js/LICENSE | 19 + .../node_modules/ipaddr.js/README.md | 161 + .../node_modules/ipaddr.js/bower.json | 29 + .../node_modules/ipaddr.js/ipaddr.min.js | 1 + .../node_modules/ipaddr.js/lib/ipaddr.js | 467 + .../node_modules/ipaddr.js/package.json | 94 + .../node_modules/ipaddr.js/src/ipaddr.coffee | 396 + .../ipaddr.js/test/ipaddr.test.coffee | 282 + .../node_modules/is-buffer/.travis.yml | 8 + .../node_modules/is-buffer/.zuul.yml | 14 + code-challenge/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 | 113 + .../node_modules/is-buffer/test/basic.js | 25 + .../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 | 83 + .../node_modules/is-promise/readme.md | 29 + .../node_modules/isarray/.npmignore | 1 + .../node_modules/isarray/.travis.yml | 4 + code-challenge/node_modules/isarray/Makefile | 6 + code-challenge/node_modules/isarray/README.md | 60 + .../node_modules/isarray/component.json | 19 + code-challenge/node_modules/isarray/index.js | 5 + .../node_modules/isarray/package.json | 105 + code-challenge/node_modules/isarray/test.js | 20 + code-challenge/node_modules/jade/.npmignore | 15 + .../node_modules/jade/.release.json | 1 + code-challenge/node_modules/jade/History.md | 991 + code-challenge/node_modules/jade/LICENSE | 22 + code-challenge/node_modules/jade/README.md | 154 + .../node_modules/jade/Readme_zh-cn.md | 1285 + code-challenge/node_modules/jade/bin/jade.js | 295 + .../node_modules/jade/block-code.html | 0 .../node_modules/jade/component.json | 16 + code-challenge/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 + code-challenge/node_modules/jade/lib/index.js | 418 + .../node_modules/jade/lib/inline-tags.js | 23 + code-challenge/node_modules/jade/lib/lexer.js | 949 + .../node_modules/jade/lib/nodes/attrs.js | 83 + .../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 + .../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 + code-challenge/node_modules/jade/lib/utils.js | 53 + code-challenge/node_modules/jade/package.json | 160 + code-challenge/node_modules/jade/release.js | 35 + code-challenge/node_modules/jade/runtime.js | 252 + .../node_modules/js-base64/.npmignore | 4 + .../node_modules/js-base64/.travis.yml | 5 + .../node_modules/js-base64/LICENSE.md | 27 + .../node_modules/js-base64/README.md | 51 + .../node_modules/js-base64/base64.html | 47 + .../node_modules/js-base64/base64.js | 194 + .../node_modules/js-base64/base64.min.js | 1 + .../node_modules/js-base64/base64_utf8 | 219 + .../node_modules/js-base64/bower.json | 17 + .../node_modules/js-base64/old/base64-1.7.js | 237 + .../node_modules/js-base64/package.js | 9 + .../node_modules/js-base64/package.json | 87 + .../node_modules/js-base64/test/dankogai.js | 47 + .../node_modules/js-base64/test/es5.js | 27 + .../node_modules/js-base64/test/index.html | 33 + .../node_modules/js-base64/test/large.js | 28 + .../node_modules/js-base64/test/yoshinoya.js | 22 + code-challenge/node_modules/json3/LICENSE | 20 + code-challenge/node_modules/json3/README.md | 152 + .../node_modules/json3/lib/json3.js | 902 + .../node_modules/json3/lib/json3.min.js | 17 + .../node_modules/json3/package.json | 149 + .../node_modules/jstransformer/LICENSE | 19 + .../node_modules/jstransformer/README.md | 103 + .../node_modules/jstransformer/index.js | 328 + .../node_modules/jstransformer/package.json | 95 + code-challenge/node_modules/kind-of/LICENSE | 21 + code-challenge/node_modules/kind-of/README.md | 247 + code-challenge/node_modules/kind-of/index.js | 113 + .../node_modules/kind-of/package.json | 155 + .../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 | 130 + .../lodash._baseassign/LICENSE.txt | 22 + .../node_modules/lodash._baseassign/README.md | 20 + .../node_modules/lodash._baseassign/index.js | 27 + .../lodash._baseassign/package.json | 127 + .../node_modules/lodash._basecopy/LICENSE.txt | 22 + .../node_modules/lodash._basecopy/README.md | 20 + .../node_modules/lodash._basecopy/index.js | 32 + .../lodash._basecopy/package.json | 124 + .../node_modules/lodash._basecreate/LICENSE | 22 + .../node_modules/lodash._basecreate/README.md | 20 + .../node_modules/lodash._basecreate/index.js | 57 + .../lodash._basecreate/package.json | 124 + .../node_modules/lodash._getnative/LICENSE | 22 + .../node_modules/lodash._getnative/README.md | 20 + .../node_modules/lodash._getnative/index.js | 137 + .../lodash._getnative/package.json | 120 + .../lodash._isiterateecall/LICENSE.txt | 22 + .../lodash._isiterateecall/README.md | 20 + .../lodash._isiterateecall/index.js | 132 + .../lodash._isiterateecall/package.json | 124 + .../node_modules/lodash.create/LICENSE | 22 + .../node_modules/lodash.create/README.md | 20 + .../node_modules/lodash.create/index.js | 55 + .../node_modules/lodash.create/package.json | 134 + .../node_modules/lodash.isarguments/LICENSE | 47 + .../node_modules/lodash.isarguments/README.md | 18 + .../node_modules/lodash.isarguments/index.js | 229 + .../lodash.isarguments/package.json | 114 + .../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 | 130 + .../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 | 134 + code-challenge/node_modules/longest/LICENSE | 21 + code-challenge/node_modules/longest/README.md | 65 + code-challenge/node_modules/longest/index.js | 37 + .../node_modules/longest/package.json | 105 + .../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 | 93 + .../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 + .../merge-descriptors/package.json | 173 + .../node_modules/methods/HISTORY.md | 29 + code-challenge/node_modules/methods/LICENSE | 24 + code-challenge/node_modules/methods/README.md | 51 + code-challenge/node_modules/methods/index.js | 69 + .../node_modules/methods/package.json | 125 + .../node_modules/mime-db/HISTORY.md | 365 + code-challenge/node_modules/mime-db/LICENSE | 22 + code-challenge/node_modules/mime-db/README.md | 82 + code-challenge/node_modules/mime-db/db.json | 6692 ++++ code-challenge/node_modules/mime-db/index.js | 11 + .../node_modules/mime-db/package.json | 134 + .../node_modules/mime-types/HISTORY.md | 204 + .../node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 103 + .../node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 130 + code-challenge/node_modules/mime/.npmignore | 0 code-challenge/node_modules/mime/LICENSE | 19 + code-challenge/node_modules/mime/README.md | 90 + .../node_modules/mime/build/build.js | 11 + .../node_modules/mime/build/test.js | 57 + code-challenge/node_modules/mime/cli.js | 8 + code-challenge/node_modules/mime/mime.js | 108 + code-challenge/node_modules/mime/package.json | 109 + code-challenge/node_modules/mime/types.json | 1 + .../node_modules/minimatch/README.md | 209 + .../node_modules/minimatch/minimatch.js | 923 + .../node_modules/minimatch/package.json | 98 + .../node_modules/minimist/.travis.yml | 4 + code-challenge/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + code-challenge/node_modules/minimist/index.js | 187 + .../node_modules/minimist/package.json | 102 + .../node_modules/minimist/readme.markdown | 73 + .../node_modules/minimist/test/dash.js | 24 + .../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 + .../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 + code-challenge/node_modules/mkdirp/LICENSE | 21 + code-challenge/node_modules/mkdirp/bin/cmd.js | 33 + .../node_modules/mkdirp/bin/usage.txt | 12 + .../node_modules/mkdirp/examples/pow.js | 6 + code-challenge/node_modules/mkdirp/index.js | 98 + .../node_modules/mkdirp/package.json | 95 + .../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/mocha/CHANGELOG.md | 1445 + code-challenge/node_modules/mocha/LICENSE | 22 + code-challenge/node_modules/mocha/README.md | 84 + .../node_modules/mocha/bin/.eslintrc | 3 + code-challenge/node_modules/mocha/bin/_mocha | 544 + code-challenge/node_modules/mocha/bin/mocha | 83 + .../node_modules/mocha/bin/options.js | 41 + code-challenge/node_modules/mocha/bower.json | 38 + .../node_modules/mocha/browser-entry.js | 187 + .../node_modules/mocha/images/error.png | Bin 0 -> 412 bytes .../node_modules/mocha/images/ok.png | Bin 0 -> 388 bytes code-challenge/node_modules/mocha/index.js | 3 + .../mocha/lib/browser/.eslintrc.yaml | 4 + .../node_modules/mocha/lib/browser/debug.js | 7 + .../node_modules/mocha/lib/browser/events.js | 195 + .../mocha/lib/browser/progress.js | 119 + .../node_modules/mocha/lib/browser/tty.js | 13 + .../node_modules/mocha/lib/context.js | 112 + code-challenge/node_modules/mocha/lib/hook.js | 48 + .../node_modules/mocha/lib/interfaces/bdd.js | 115 + .../mocha/lib/interfaces/common.js | 158 + .../mocha/lib/interfaces/exports.js | 63 + .../mocha/lib/interfaces/index.js | 6 + .../mocha/lib/interfaces/qunit.js | 99 + .../node_modules/mocha/lib/interfaces/tdd.js | 106 + .../node_modules/mocha/lib/mocha.js | 522 + code-challenge/node_modules/mocha/lib/ms.js | 130 + .../node_modules/mocha/lib/pending.js | 16 + .../node_modules/mocha/lib/reporters/base.js | 491 + .../node_modules/mocha/lib/reporters/doc.js | 64 + .../node_modules/mocha/lib/reporters/dot.js | 68 + .../node_modules/mocha/lib/reporters/html.js | 346 + .../node_modules/mocha/lib/reporters/index.js | 19 + .../mocha/lib/reporters/json-stream.js | 63 + .../node_modules/mocha/lib/reporters/json.js | 92 + .../mocha/lib/reporters/landing.js | 94 + .../node_modules/mocha/lib/reporters/list.js | 63 + .../mocha/lib/reporters/markdown.js | 99 + .../node_modules/mocha/lib/reporters/min.js | 38 + .../node_modules/mocha/lib/reporters/nyan.js | 263 + .../mocha/lib/reporters/progress.js | 91 + .../node_modules/mocha/lib/reporters/spec.js | 81 + .../node_modules/mocha/lib/reporters/tap.js | 70 + .../node_modules/mocha/lib/reporters/xunit.js | 168 + .../node_modules/mocha/lib/runnable.js | 384 + .../node_modules/mocha/lib/runner.js | 963 + .../node_modules/mocha/lib/suite.js | 402 + .../node_modules/mocha/lib/template.html | 18 + code-challenge/node_modules/mocha/lib/test.js | 52 + .../mocha/lib/to-iso-string/LICENSE | 19 + .../mocha/lib/to-iso-string/index.js | 37 + .../node_modules/mocha/lib/utils.js | 802 + .../node_modules/mocha/lib/utils.js.orig | 804 + code-challenge/node_modules/mocha/mocha.css | 326 + code-challenge/node_modules/mocha/mocha.js | 15556 ++++++++ .../mocha/node_modules/commander/Readme.md | 351 + .../mocha/node_modules/commander/index.js | 1110 + .../mocha/node_modules/commander/package.json | 105 + .../node_modules/mocha/package.json | 1416 + code-challenge/node_modules/morgan/HISTORY.md | 158 + code-challenge/node_modules/morgan/LICENSE | 23 + code-challenge/node_modules/morgan/README.md | 324 + code-challenge/node_modules/morgan/index.js | 501 + .../node_modules/morgan/package.json | 132 + code-challenge/node_modules/ms/.npmignore | 5 + code-challenge/node_modules/ms/LICENSE | 20 + code-challenge/node_modules/ms/README.md | 35 + code-challenge/node_modules/ms/index.js | 125 + code-challenge/node_modules/ms/package.json | 86 + .../node_modules/negotiator/HISTORY.md | 76 + .../node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 62 + .../node_modules/negotiator/lib/charset.js | 102 + .../node_modules/negotiator/lib/encoding.js | 118 + .../node_modules/negotiator/lib/language.js | 112 + .../node_modules/negotiator/lib/mediaType.js | 179 + .../node_modules/negotiator/package.json | 121 + .../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 | 110 + .../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 | 104 + code-challenge/node_modules/once/LICENSE | 15 + code-challenge/node_modules/once/README.md | 79 + code-challenge/node_modules/once/once.js | 42 + code-challenge/node_modules/once/package.json | 102 + .../node_modules/optimist/.travis.yml | 4 + code-challenge/node_modules/optimist/LICENSE | 21 + .../node_modules/optimist/example/bool.js | 10 + .../optimist/example/boolean_double.js | 7 + .../optimist/example/boolean_single.js | 7 + .../optimist/example/default_hash.js | 8 + .../optimist/example/default_singles.js | 7 + .../node_modules/optimist/example/divide.js | 8 + .../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 + code-challenge/node_modules/optimist/index.js | 478 + .../node_modules/optimist/package.json | 97 + .../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/parseurl/HISTORY.md | 47 + code-challenge/node_modules/parseurl/LICENSE | 24 + .../node_modules/parseurl/README.md | 120 + code-challenge/node_modules/parseurl/index.js | 138 + .../node_modules/parseurl/package.json | 126 + .../node_modules/path-is-absolute/index.js | 20 + .../node_modules/path-is-absolute/license | 21 + .../path-is-absolute/package.json | 112 + .../node_modules/path-is-absolute/readme.md | 59 + .../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 | 220 + .../process-nextick-args/.travis.yml | 12 + .../process-nextick-args/index.js | 43 + .../process-nextick-args/license.md | 19 + .../process-nextick-args/package.json | 84 + .../process-nextick-args/readme.md | 18 + .../node_modules/process-nextick-args/test.js | 24 + code-challenge/node_modules/promise/.jshintrc | 5 + .../node_modules/promise/.npmignore | 6 + code-challenge/node_modules/promise/LICENSE | 19 + code-challenge/node_modules/promise/Readme.md | 221 + code-challenge/node_modules/promise/core.js | 5 + code-challenge/node_modules/promise/index.js | 6 + .../node_modules/promise/lib/core.js | 105 + .../node_modules/promise/lib/done.js | 14 + .../promise/lib/es6-extensions.js | 108 + .../promise/lib/node-extensions.js | 63 + .../node_modules/promise/package.json | 91 + .../node_modules/promise/polyfill-done.js | 12 + .../node_modules/promise/polyfill.js | 10 + .../node_modules/proxy-addr/HISTORY.md | 80 + .../node_modules/proxy-addr/LICENSE | 22 + .../node_modules/proxy-addr/README.md | 137 + .../node_modules/proxy-addr/index.js | 347 + .../node_modules/proxy-addr/package.json | 124 + code-challenge/node_modules/qs/.eslintignore | 1 + code-challenge/node_modules/qs/.eslintrc | 19 + code-challenge/node_modules/qs/.jscs.json | 176 + code-challenge/node_modules/qs/CHANGELOG.md | 120 + .../node_modules/qs/CONTRIBUTING.md | 1 + code-challenge/node_modules/qs/LICENSE | 28 + code-challenge/node_modules/qs/dist/qs.js | 487 + code-challenge/node_modules/qs/lib/index.js | 9 + code-challenge/node_modules/qs/lib/parse.js | 167 + .../node_modules/qs/lib/stringify.js | 137 + code-challenge/node_modules/qs/lib/utils.js | 164 + code-challenge/node_modules/qs/package.json | 121 + code-challenge/node_modules/qs/test/index.js | 5 + code-challenge/node_modules/qs/test/parse.js | 423 + .../node_modules/qs/test/stringify.js | 305 + code-challenge/node_modules/qs/test/utils.js | 9 + .../node_modules/range-parser/HISTORY.md | 40 + .../node_modules/range-parser/LICENSE | 22 + .../node_modules/range-parser/README.md | 57 + .../node_modules/range-parser/index.js | 63 + .../node_modules/range-parser/package.json | 112 + .../node_modules/raw-body/HISTORY.md | 209 + code-challenge/node_modules/raw-body/LICENSE | 22 + .../node_modules/raw-body/README.md | 126 + code-challenge/node_modules/raw-body/index.js | 320 + .../node_modules/raw-body/package.json | 125 + .../node_modules/readable-stream/.npmignore | 8 + .../node_modules/readable-stream/.travis.yml | 49 + .../node_modules/readable-stream/LICENSE | 18 + .../node_modules/readable-stream/README.md | 36 + .../readable-stream/doc/stream.md | 2015 ++ .../doc/wg-meetings/2015-01-30.md | 60 + .../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 | 937 + .../readable-stream/lib/_stream_transform.js | 180 + .../readable-stream/lib/_stream_writable.js | 526 + .../lib/internal/streams/BufferList.js | 64 + .../node_modules/readable-stream/package.json | 126 + .../readable-stream/passthrough.js | 1 + .../node_modules/readable-stream/readable.js | 16 + .../node_modules/readable-stream/transform.js | 1 + .../node_modules/readable-stream/writable.js | 1 + .../node_modules/repeat-string/README.md | 118 + .../node_modules/repeat-string/index.js | 68 + .../node_modules/repeat-string/package.json | 138 + .../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 | 102 + code-challenge/node_modules/send/HISTORY.md | 310 + code-challenge/node_modules/send/LICENSE | 23 + code-challenge/node_modules/send/README.md | 195 + code-challenge/node_modules/send/index.js | 820 + .../send/node_modules/http-errors/HISTORY.md | 76 + .../send/node_modules/http-errors/LICENSE | 22 + .../send/node_modules/http-errors/README.md | 63 + .../send/node_modules/http-errors/index.js | 120 + .../node_modules/http-errors/package.json | 119 + .../send/node_modules/statuses/LICENSE | 22 + .../send/node_modules/statuses/README.md | 114 + .../send/node_modules/statuses/codes.json | 64 + .../send/node_modules/statuses/index.js | 60 + .../send/node_modules/statuses/package.json | 120 + code-challenge/node_modules/send/package.json | 125 + .../node_modules/serve-favicon/HISTORY.md | 112 + .../node_modules/serve-favicon/LICENSE | 25 + .../node_modules/serve-favicon/README.md | 132 + .../node_modules/serve-favicon/index.js | 177 + .../node_modules/serve-favicon/package.json | 104 + .../node_modules/serve-static/HISTORY.md | 309 + .../node_modules/serve-static/LICENSE | 25 + .../node_modules/serve-static/README.md | 236 + .../node_modules/serve-static/index.js | 187 + .../node_modules/http-errors/HISTORY.md | 76 + .../node_modules/http-errors/LICENSE | 22 + .../node_modules/http-errors/README.md | 63 + .../node_modules/http-errors/index.js | 120 + .../node_modules/http-errors/package.json | 119 + .../serve-static/node_modules/send/HISTORY.md | 315 + .../serve-static/node_modules/send/LICENSE | 23 + .../serve-static/node_modules/send/README.md | 234 + .../serve-static/node_modules/send/index.js | 829 + .../node_modules/send/package.json | 123 + .../node_modules/statuses/LICENSE | 22 + .../node_modules/statuses/README.md | 114 + .../node_modules/statuses/codes.json | 64 + .../node_modules/statuses/index.js | 60 + .../node_modules/statuses/package.json | 120 + .../node_modules/serve-static/package.json | 119 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 21 + .../node_modules/setprototypeof/index.js | 11 + .../node_modules/setprototypeof/package.json | 89 + .../node_modules/source-map/README.md | 510 + .../source-map/build/assert-shim.js | 56 + .../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 + .../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 | 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 | 235 + .../node_modules/statuses/HISTORY.md | 50 + code-challenge/node_modules/statuses/LICENSE | 23 + .../node_modules/statuses/README.md | 114 + .../node_modules/statuses/codes.json | 65 + code-challenge/node_modules/statuses/index.js | 110 + .../node_modules/statuses/package.json | 139 + .../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 | 83 + .../node_modules/stream-consume/test/tests.js | 180 + .../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 | 88 + .../node_modules/superagent/.npmignore | 7 + .../node_modules/superagent/.travis.yml | 17 + .../node_modules/superagent/.zuul.yml | 15 + .../node_modules/superagent/Contributing.md | 7 + .../node_modules/superagent/History.md | 598 + .../node_modules/superagent/LICENSE | 22 + .../node_modules/superagent/Makefile | 57 + .../node_modules/superagent/Readme.md | 129 + .../node_modules/superagent/component.json | 20 + .../node_modules/superagent/docs/head.html | 10 + .../superagent/docs/images/bg.png | Bin 0 -> 8856 bytes .../node_modules/superagent/docs/index.md | 476 + .../node_modules/superagent/docs/style.css | 81 + .../node_modules/superagent/docs/tail.html | 29 + .../node_modules/superagent/docs/test.html | 2082 ++ .../node_modules/superagent/lib/client.js | 976 + .../node_modules/superagent/lib/is-object.js | 13 + .../node_modules/superagent/lib/node/agent.js | 88 + .../node_modules/superagent/lib/node/index.js | 981 + .../superagent/lib/node/parsers/image.js | 10 + .../superagent/lib/node/parsers/index.js | 5 + .../superagent/lib/node/parsers/json.js | 19 + .../superagent/lib/node/parsers/text.js | 7 + .../superagent/lib/node/parsers/urlencoded.js | 19 + .../node_modules/superagent/lib/node/part.js | 149 + .../superagent/lib/node/response.js | 215 + .../node_modules/superagent/lib/node/utils.js | 147 + .../superagent/lib/request-base.js | 372 + .../node_modules/superagent/lib/request.js | 32 + .../node_modules/superagent/package.json | 180 + .../node_modules/superagent/superagent.js | 1568 + .../node_modules/supertest/.eslintrc | 22 + .../node_modules/supertest/.npmignore | 1 + .../node_modules/supertest/.travis.yml | 6 + .../node_modules/supertest/History.md | 181 + code-challenge/node_modules/supertest/LICENSE | 22 + .../node_modules/supertest/Readme.md | 220 + .../node_modules/supertest/index.js | 45 + .../node_modules/supertest/lib/agent.js | 54 + .../node_modules/supertest/lib/test.js | 288 + .../node_modules/supertest/package.json | 124 + .../node_modules/supertest/test/.eslintrc | 10 + .../supertest/test/fixtures/test_cert.pem | 16 + .../supertest/test/fixtures/test_key.pem | 15 + .../node_modules/supertest/test/supertest.js | 1066 + .../node_modules/supports-color/browser.js | 2 + .../node_modules/supports-color/index.js | 72 + .../node_modules/supports-color/license | 21 + .../node_modules/supports-color/package.json | 129 + .../node_modules/supports-color/readme.md | 60 + .../node_modules/transformers/.npmignore | 2 + .../node_modules/transformers/README.md | 141 + .../node_modules/transformers/history.md | 77 + .../node_modules/transformers/lib/shared.js | 162 + .../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 | 81 + .../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 | 84 + .../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 | 220 + .../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 | 97 + .../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 | 132 + .../node_modules/type-is/HISTORY.md | 206 + code-challenge/node_modules/type-is/LICENSE | 23 + code-challenge/node_modules/type-is/README.md | 136 + code-challenge/node_modules/type-is/index.js | 262 + .../node_modules/type-is/package.json | 122 + code-challenge/node_modules/uglify-js/LICENSE | 29 + .../node_modules/uglify-js/README.md | 907 + .../uglify-js/bin/extract-props.js | 77 + .../node_modules/uglify-js/bin/uglifyjs | 594 + .../node_modules/uglify-js/lib/ast.js | 1021 + .../node_modules/uglify-js/lib/compress.js | 2912 ++ .../node_modules/uglify-js/lib/mozilla-ast.js | 609 + .../node_modules/uglify-js/lib/output.js | 1417 + .../node_modules/uglify-js/lib/parse.js | 1573 + .../node_modules/uglify-js/lib/propmangle.js | 230 + .../node_modules/uglify-js/lib/scope.js | 640 + .../node_modules/uglify-js/lib/sourcemap.js | 97 + .../node_modules/uglify-js/lib/transform.js | 218 + .../node_modules/uglify-js/lib/utils.js | 320 + .../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 | 255 + .../node_modules/source-map/source-map.js | 8 + .../node_modules/uglify-js/package.json | 125 + .../uglify-js/tools/domprops.json | 5603 +++ .../node_modules/uglify-js/tools/exports.js | 23 + .../node_modules/uglify-js/tools/node.js | 308 + .../node_modules/uglify-js/tools/props.html | 61 + .../uglify-to-browserify/.npmignore | 14 + .../uglify-to-browserify/.travis.yml | 3 + .../node_modules/uglify-to-browserify/LICENSE | 19 + .../uglify-to-browserify/README.md | 15 + .../uglify-to-browserify/index.js | 49 + .../uglify-to-browserify/package.json | 81 + .../uglify-to-browserify/test/index.js | 22 + code-challenge/node_modules/unpipe/HISTORY.md | 4 + code-challenge/node_modules/unpipe/LICENSE | 22 + code-challenge/node_modules/unpipe/README.md | 43 + code-challenge/node_modules/unpipe/index.js | 69 + .../node_modules/unpipe/package.json | 95 + .../node_modules/utf8/LICENSE-MIT.txt | 20 + code-challenge/node_modules/utf8/README.md | 119 + code-challenge/node_modules/utf8/package.json | 103 + code-challenge/node_modules/utf8/utf8.js | 244 + .../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 | 90 + .../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 | 94 + code-challenge/node_modules/vary/HISTORY.md | 23 + code-challenge/node_modules/vary/LICENSE | 22 + code-challenge/node_modules/vary/README.md | 91 + code-challenge/node_modules/vary/index.js | 117 + code-challenge/node_modules/vary/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 | 93 + .../node_modules/void-elements/pre-publish.js | 29 + .../node_modules/void-elements/test/index.js | 5 + .../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 | 90 + code-challenge/node_modules/with/.npmignore | 2 + code-challenge/node_modules/with/LICENSE | 19 + code-challenge/node_modules/with/README.md | 81 + code-challenge/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 + .../with/node_modules/acorn/AUTHORS | 38 + .../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 | 201 + .../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 + code-challenge/node_modules/with/package.json | 86 + code-challenge/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 + code-challenge/node_modules/wordwrap/index.js | 76 + .../node_modules/wordwrap/package.json | 98 + .../node_modules/wordwrap/test/break.js | 30 + .../node_modules/wordwrap/test/idleness.txt | 63 + .../node_modules/wordwrap/test/wrap.js | 31 + code-challenge/node_modules/wrappy/README.md | 36 + .../node_modules/wrappy/package.json | 98 + code-challenge/node_modules/wrappy/wrappy.js | 33 + .../node_modules/yargs/CHANGELOG.md | 374 + code-challenge/node_modules/yargs/LICENSE | 21 + code-challenge/node_modules/yargs/README.md | 926 + .../node_modules/yargs/completion.sh.hbs | 22 + code-challenge/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 | 154 + code-challenge/package.json | 23 + code-challenge/public/stylesheets/style.css | 13 + code-challenge/routes/index.js | 86 + code-challenge/routes/npm-debug.log | 45 + code-challenge/routes/users.js | 9 + code-challenge/test/test.js | 109 + code-challenge/views/error.jade | 6 + code-challenge/views/index.jade | 13 + code-challenge/views/layout.jade | 13 + code-challenge/views/npm-debug.log | 45 + 1480 files changed, 309686 insertions(+) create mode 100644 code-challenge/app.js create mode 100755 code-challenge/bin/www create mode 160000 code-challenge/github create mode 120000 code-challenge/node_modules/.bin/_mocha create mode 120000 code-challenge/node_modules/.bin/acorn create mode 120000 code-challenge/node_modules/.bin/cleancss create mode 120000 code-challenge/node_modules/.bin/jade create mode 120000 code-challenge/node_modules/.bin/mime create mode 120000 code-challenge/node_modules/.bin/mkdirp create mode 120000 code-challenge/node_modules/.bin/mocha create mode 120000 code-challenge/node_modules/.bin/uglifyjs create mode 100644 code-challenge/node_modules/accepts/HISTORY.md create mode 100644 code-challenge/node_modules/accepts/LICENSE create mode 100644 code-challenge/node_modules/accepts/README.md create mode 100644 code-challenge/node_modules/accepts/index.js create mode 100644 code-challenge/node_modules/accepts/package.json create mode 100644 code-challenge/node_modules/acorn-globals/LICENSE create mode 100644 code-challenge/node_modules/acorn-globals/README.md create mode 100644 code-challenge/node_modules/acorn-globals/index.js create mode 100644 code-challenge/node_modules/acorn-globals/package.json create mode 100644 code-challenge/node_modules/acorn/.editorconfig create mode 100644 code-challenge/node_modules/acorn/.gitattributes create mode 100644 code-challenge/node_modules/acorn/.npmignore create mode 100644 code-challenge/node_modules/acorn/.tern-project create mode 100644 code-challenge/node_modules/acorn/.travis.yml create mode 100644 code-challenge/node_modules/acorn/AUTHORS create mode 100644 code-challenge/node_modules/acorn/LICENSE create mode 100644 code-challenge/node_modules/acorn/README.md create mode 100755 code-challenge/node_modules/acorn/bin/acorn create mode 100644 code-challenge/node_modules/acorn/bin/build-acorn.js create mode 100644 code-challenge/node_modules/acorn/bin/generate-identifier-regex.js create mode 100755 code-challenge/node_modules/acorn/bin/update_authors.sh create mode 100644 code-challenge/node_modules/acorn/dist/.keep create mode 100644 code-challenge/node_modules/acorn/dist/acorn.js create mode 100644 code-challenge/node_modules/acorn/dist/acorn_loose.js create mode 100644 code-challenge/node_modules/acorn/dist/walk.js create mode 100644 code-challenge/node_modules/acorn/package.json create mode 100644 code-challenge/node_modules/acorn/src/bin/acorn.js create mode 100644 code-challenge/node_modules/acorn/src/expression.js create mode 100644 code-challenge/node_modules/acorn/src/identifier.js create mode 100644 code-challenge/node_modules/acorn/src/index.js create mode 100644 code-challenge/node_modules/acorn/src/location.js create mode 100644 code-challenge/node_modules/acorn/src/locutil.js create mode 100644 code-challenge/node_modules/acorn/src/loose/acorn_loose.js create mode 100644 code-challenge/node_modules/acorn/src/loose/expression.js create mode 100644 code-challenge/node_modules/acorn/src/loose/index.js create mode 100644 code-challenge/node_modules/acorn/src/loose/parseutil.js create mode 100644 code-challenge/node_modules/acorn/src/loose/state.js create mode 100644 code-challenge/node_modules/acorn/src/loose/statement.js create mode 100644 code-challenge/node_modules/acorn/src/loose/tokenize.js create mode 100644 code-challenge/node_modules/acorn/src/lval.js create mode 100644 code-challenge/node_modules/acorn/src/node.js create mode 100644 code-challenge/node_modules/acorn/src/options.js create mode 100644 code-challenge/node_modules/acorn/src/parseutil.js create mode 100644 code-challenge/node_modules/acorn/src/state.js create mode 100644 code-challenge/node_modules/acorn/src/statement.js create mode 100644 code-challenge/node_modules/acorn/src/tokencontext.js create mode 100644 code-challenge/node_modules/acorn/src/tokenize.js create mode 100644 code-challenge/node_modules/acorn/src/tokentype.js create mode 100644 code-challenge/node_modules/acorn/src/util.js create mode 100644 code-challenge/node_modules/acorn/src/walk/index.js create mode 100644 code-challenge/node_modules/acorn/src/whitespace.js create mode 100644 code-challenge/node_modules/align-text/LICENSE create mode 100644 code-challenge/node_modules/align-text/README.md create mode 100644 code-challenge/node_modules/align-text/index.js create mode 100644 code-challenge/node_modules/align-text/package.json create mode 100644 code-challenge/node_modules/amdefine/LICENSE create mode 100644 code-challenge/node_modules/amdefine/README.md create mode 100644 code-challenge/node_modules/amdefine/amdefine.js create mode 100644 code-challenge/node_modules/amdefine/intercept.js create mode 100644 code-challenge/node_modules/amdefine/package.json create mode 100644 code-challenge/node_modules/array-flatten/LICENSE create mode 100644 code-challenge/node_modules/array-flatten/README.md create mode 100644 code-challenge/node_modules/array-flatten/array-flatten.js create mode 100644 code-challenge/node_modules/array-flatten/package.json create mode 100644 code-challenge/node_modules/asap/LICENSE.md create mode 100644 code-challenge/node_modules/asap/README.md create mode 100644 code-challenge/node_modules/asap/asap.js create mode 100644 code-challenge/node_modules/asap/package.json create mode 100644 code-challenge/node_modules/async/LICENSE create mode 100644 code-challenge/node_modules/async/README.md create mode 100644 code-challenge/node_modules/async/component.json create mode 100755 code-challenge/node_modules/async/lib/async.js create mode 100644 code-challenge/node_modules/async/package.json create mode 100644 code-challenge/node_modules/axios/CHANGELOG.md create mode 100644 code-challenge/node_modules/axios/CODE_OF_CONDUCT.md create mode 100644 code-challenge/node_modules/axios/COLLABORATOR_GUIDE.md create mode 100644 code-challenge/node_modules/axios/LICENSE create mode 100644 code-challenge/node_modules/axios/README.md create mode 100644 code-challenge/node_modules/axios/UPGRADE_GUIDE.md create mode 100644 code-challenge/node_modules/axios/axios.d.ts create mode 100644 code-challenge/node_modules/axios/component.json create mode 100644 code-challenge/node_modules/axios/dist/axios.js create mode 100644 code-challenge/node_modules/axios/dist/axios.map create mode 100644 code-challenge/node_modules/axios/dist/axios.min.js create mode 100644 code-challenge/node_modules/axios/dist/axios.min.map create mode 100644 code-challenge/node_modules/axios/http_proxy.txt create mode 100644 code-challenge/node_modules/axios/index.js create mode 100644 code-challenge/node_modules/axios/lib/adapters/http.js create mode 100644 code-challenge/node_modules/axios/lib/adapters/xhr.js create mode 100644 code-challenge/node_modules/axios/lib/axios.js create mode 100644 code-challenge/node_modules/axios/lib/core/InterceptorManager.js create mode 100644 code-challenge/node_modules/axios/lib/core/dispatchRequest.js create mode 100644 code-challenge/node_modules/axios/lib/defaults.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/bind.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/btoa.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/buildURL.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/combineURLs.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/cookies.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/deprecatedMethod.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/isAbsoluteURL.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/isURLSameOrigin.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/parseHeaders.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/spread.js create mode 100644 code-challenge/node_modules/axios/lib/helpers/transformData.js create mode 100644 code-challenge/node_modules/axios/lib/utils.js create mode 100644 code-challenge/node_modules/axios/package.json create mode 100644 code-challenge/node_modules/axios/sauce_connect.log create mode 100644 code-challenge/node_modules/balanced-match/.npmignore create mode 100644 code-challenge/node_modules/balanced-match/LICENSE.md create mode 100644 code-challenge/node_modules/balanced-match/README.md create mode 100644 code-challenge/node_modules/balanced-match/index.js create mode 100644 code-challenge/node_modules/balanced-match/package.json create mode 100644 code-challenge/node_modules/basic-auth/HISTORY.md create mode 100644 code-challenge/node_modules/basic-auth/LICENSE create mode 100644 code-challenge/node_modules/basic-auth/README.md create mode 100644 code-challenge/node_modules/basic-auth/index.js create mode 100644 code-challenge/node_modules/basic-auth/package.json create mode 100644 code-challenge/node_modules/bluebird/LICENSE create mode 100644 code-challenge/node_modules/bluebird/README.md create mode 100644 code-challenge/node_modules/bluebird/changelog.md create mode 100644 code-challenge/node_modules/bluebird/js/browser/bluebird.core.js create mode 100644 code-challenge/node_modules/bluebird/js/browser/bluebird.core.min.js create mode 100644 code-challenge/node_modules/bluebird/js/browser/bluebird.js create mode 100644 code-challenge/node_modules/bluebird/js/browser/bluebird.min.js create mode 100644 code-challenge/node_modules/bluebird/js/release/any.js create mode 100644 code-challenge/node_modules/bluebird/js/release/assert.js create mode 100644 code-challenge/node_modules/bluebird/js/release/async.js create mode 100644 code-challenge/node_modules/bluebird/js/release/bind.js create mode 100644 code-challenge/node_modules/bluebird/js/release/bluebird.js create mode 100644 code-challenge/node_modules/bluebird/js/release/call_get.js create mode 100644 code-challenge/node_modules/bluebird/js/release/cancel.js create mode 100644 code-challenge/node_modules/bluebird/js/release/catch_filter.js create mode 100644 code-challenge/node_modules/bluebird/js/release/context.js create mode 100644 code-challenge/node_modules/bluebird/js/release/debuggability.js create mode 100644 code-challenge/node_modules/bluebird/js/release/direct_resolve.js create mode 100644 code-challenge/node_modules/bluebird/js/release/each.js create mode 100644 code-challenge/node_modules/bluebird/js/release/errors.js create mode 100644 code-challenge/node_modules/bluebird/js/release/es5.js create mode 100644 code-challenge/node_modules/bluebird/js/release/filter.js create mode 100644 code-challenge/node_modules/bluebird/js/release/finally.js create mode 100644 code-challenge/node_modules/bluebird/js/release/generators.js create mode 100644 code-challenge/node_modules/bluebird/js/release/join.js create mode 100644 code-challenge/node_modules/bluebird/js/release/map.js create mode 100644 code-challenge/node_modules/bluebird/js/release/method.js create mode 100644 code-challenge/node_modules/bluebird/js/release/nodeback.js create mode 100644 code-challenge/node_modules/bluebird/js/release/nodeify.js create mode 100644 code-challenge/node_modules/bluebird/js/release/promise.js create mode 100644 code-challenge/node_modules/bluebird/js/release/promise_array.js create mode 100644 code-challenge/node_modules/bluebird/js/release/promisify.js create mode 100644 code-challenge/node_modules/bluebird/js/release/props.js create mode 100644 code-challenge/node_modules/bluebird/js/release/queue.js create mode 100644 code-challenge/node_modules/bluebird/js/release/race.js create mode 100644 code-challenge/node_modules/bluebird/js/release/reduce.js create mode 100644 code-challenge/node_modules/bluebird/js/release/schedule.js create mode 100644 code-challenge/node_modules/bluebird/js/release/settle.js create mode 100644 code-challenge/node_modules/bluebird/js/release/some.js create mode 100644 code-challenge/node_modules/bluebird/js/release/synchronous_inspection.js create mode 100644 code-challenge/node_modules/bluebird/js/release/thenables.js create mode 100644 code-challenge/node_modules/bluebird/js/release/timers.js create mode 100644 code-challenge/node_modules/bluebird/js/release/using.js create mode 100644 code-challenge/node_modules/bluebird/js/release/util.js create mode 100644 code-challenge/node_modules/bluebird/package.json create mode 100644 code-challenge/node_modules/body-parser/HISTORY.md create mode 100644 code-challenge/node_modules/body-parser/LICENSE create mode 100644 code-challenge/node_modules/body-parser/README.md create mode 100644 code-challenge/node_modules/body-parser/index.js create mode 100644 code-challenge/node_modules/body-parser/lib/read.js create mode 100644 code-challenge/node_modules/body-parser/lib/types/json.js create mode 100644 code-challenge/node_modules/body-parser/lib/types/raw.js create mode 100644 code-challenge/node_modules/body-parser/lib/types/text.js create mode 100644 code-challenge/node_modules/body-parser/lib/types/urlencoded.js create mode 100644 code-challenge/node_modules/body-parser/package.json create mode 100644 code-challenge/node_modules/brace-expansion/README.md create mode 100644 code-challenge/node_modules/brace-expansion/index.js create mode 100644 code-challenge/node_modules/brace-expansion/package.json create mode 100644 code-challenge/node_modules/browser-stdout/.npmignore create mode 100644 code-challenge/node_modules/browser-stdout/README.md create mode 100644 code-challenge/node_modules/browser-stdout/index.js create mode 100644 code-challenge/node_modules/browser-stdout/package.json create mode 100644 code-challenge/node_modules/buffer-shims/index.js create mode 100644 code-challenge/node_modules/buffer-shims/package.json create mode 100644 code-challenge/node_modules/buffer-shims/readme.md create mode 100644 code-challenge/node_modules/bytes/History.md create mode 100644 code-challenge/node_modules/bytes/LICENSE create mode 100644 code-challenge/node_modules/bytes/Readme.md create mode 100644 code-challenge/node_modules/bytes/index.js create mode 100644 code-challenge/node_modules/bytes/package.json create mode 100644 code-challenge/node_modules/camelcase/index.js create mode 100644 code-challenge/node_modules/camelcase/license create mode 100644 code-challenge/node_modules/camelcase/package.json create mode 100644 code-challenge/node_modules/camelcase/readme.md create mode 100644 code-challenge/node_modules/center-align/LICENSE create mode 100644 code-challenge/node_modules/center-align/README.md create mode 100644 code-challenge/node_modules/center-align/index.js create mode 100644 code-challenge/node_modules/center-align/package.json create mode 100644 code-challenge/node_modules/center-align/utils.js create mode 100644 code-challenge/node_modules/character-parser/.npmignore create mode 100644 code-challenge/node_modules/character-parser/LICENSE create mode 100644 code-challenge/node_modules/character-parser/README.md create mode 100644 code-challenge/node_modules/character-parser/index.js create mode 100644 code-challenge/node_modules/character-parser/package.json create mode 100644 code-challenge/node_modules/clean-css/History.md create mode 100644 code-challenge/node_modules/clean-css/LICENSE create mode 100644 code-challenge/node_modules/clean-css/README.md create mode 100755 code-challenge/node_modules/clean-css/bin/cleancss create mode 100644 code-challenge/node_modules/clean-css/index.js create mode 100644 code-challenge/node_modules/clean-css/lib/clean.js create mode 100644 code-challenge/node_modules/clean-css/lib/colors/hex-name-shortener.js create mode 100644 code-challenge/node_modules/clean-css/lib/colors/hsl.js create mode 100644 code-challenge/node_modules/clean-css/lib/colors/rgb.js create mode 100644 code-challenge/node_modules/clean-css/lib/imports/inliner.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/break-up.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/can-override.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/clone.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/compactable.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/every-combination.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/has-inherit.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/invalid-property-error.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/optimizer.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/override-compactor.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/populate-components.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/remove-unused.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/restore-from-optimizing.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/restore.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/shorthand-compactor.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/validator.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/vendor-prefixes.js create mode 100644 code-challenge/node_modules/clean-css/lib/properties/wrap-for-optimizing.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/advanced.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/clean-up.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/extractor.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/is-special.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/merge-adjacent.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/merge-media-queries.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/merge-non-adjacent-by-body.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/merge-non-adjacent-by-selector.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/reduce-non-adjacent.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/remove-duplicate-media-queries.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/remove-duplicates.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/reorderable.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/restructure.js create mode 100644 code-challenge/node_modules/clean-css/lib/selectors/simple.js create mode 100644 code-challenge/node_modules/clean-css/lib/source-maps/track.js create mode 100644 code-challenge/node_modules/clean-css/lib/stringifier/helpers.js create mode 100644 code-challenge/node_modules/clean-css/lib/stringifier/one-time.js create mode 100644 code-challenge/node_modules/clean-css/lib/stringifier/simple.js create mode 100644 code-challenge/node_modules/clean-css/lib/stringifier/source-maps.js create mode 100644 code-challenge/node_modules/clean-css/lib/text/comments-processor.js create mode 100644 code-challenge/node_modules/clean-css/lib/text/escape-store.js create mode 100644 code-challenge/node_modules/clean-css/lib/text/expressions-processor.js create mode 100644 code-challenge/node_modules/clean-css/lib/text/free-text-processor.js create mode 100644 code-challenge/node_modules/clean-css/lib/text/urls-processor.js create mode 100644 code-challenge/node_modules/clean-css/lib/tokenizer/extract-properties.js create mode 100644 code-challenge/node_modules/clean-css/lib/tokenizer/extract-selectors.js create mode 100644 code-challenge/node_modules/clean-css/lib/tokenizer/tokenize.js create mode 100644 code-challenge/node_modules/clean-css/lib/urls/rebase.js create mode 100644 code-challenge/node_modules/clean-css/lib/urls/reduce.js create mode 100644 code-challenge/node_modules/clean-css/lib/urls/rewrite.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/clone-array.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/compatibility.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/input-source-map-tracker.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/object.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/quote-scanner.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/source-reader.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/source-tracker.js create mode 100644 code-challenge/node_modules/clean-css/lib/utils/split.js create mode 100644 code-challenge/node_modules/clean-css/node_modules/commander/History.md create mode 100644 code-challenge/node_modules/clean-css/node_modules/commander/LICENSE create mode 100644 code-challenge/node_modules/clean-css/node_modules/commander/Readme.md create mode 100644 code-challenge/node_modules/clean-css/node_modules/commander/index.js create mode 100644 code-challenge/node_modules/clean-css/node_modules/commander/package.json create mode 100644 code-challenge/node_modules/clean-css/package.json create mode 100644 code-challenge/node_modules/cliui/.coveralls.yml create mode 100644 code-challenge/node_modules/cliui/.npmignore create mode 100644 code-challenge/node_modules/cliui/.travis.yml create mode 100644 code-challenge/node_modules/cliui/LICENSE.txt create mode 100644 code-challenge/node_modules/cliui/README.md create mode 100644 code-challenge/node_modules/cliui/index.js create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/.npmignore create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/README.markdown create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/example/center.js create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/example/meat.js create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/index.js create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/package.json create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/test/break.js create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/test/idleness.txt create mode 100644 code-challenge/node_modules/cliui/node_modules/wordwrap/test/wrap.js create mode 100644 code-challenge/node_modules/cliui/package.json create mode 100644 code-challenge/node_modules/cliui/test/cliui.js create mode 100644 code-challenge/node_modules/combined-stream/License create mode 100644 code-challenge/node_modules/combined-stream/Readme.md create mode 100644 code-challenge/node_modules/combined-stream/lib/combined_stream.js create mode 100644 code-challenge/node_modules/combined-stream/package.json create mode 100644 code-challenge/node_modules/commander/History.md create mode 100644 code-challenge/node_modules/commander/Readme.md create mode 100644 code-challenge/node_modules/commander/index.js create mode 100644 code-challenge/node_modules/commander/package.json create mode 100644 code-challenge/node_modules/component-emitter/LICENSE create mode 100644 code-challenge/node_modules/component-emitter/Readme.md create mode 100644 code-challenge/node_modules/component-emitter/index.js create mode 100644 code-challenge/node_modules/component-emitter/package.json create mode 100644 code-challenge/node_modules/concat-map/.travis.yml create mode 100644 code-challenge/node_modules/concat-map/LICENSE create mode 100644 code-challenge/node_modules/concat-map/README.markdown create mode 100644 code-challenge/node_modules/concat-map/example/map.js create mode 100644 code-challenge/node_modules/concat-map/index.js create mode 100644 code-challenge/node_modules/concat-map/package.json create mode 100644 code-challenge/node_modules/concat-map/test/map.js create mode 100644 code-challenge/node_modules/constantinople/.gitattributes create mode 100644 code-challenge/node_modules/constantinople/.npmignore create mode 100644 code-challenge/node_modules/constantinople/.travis.yml create mode 100644 code-challenge/node_modules/constantinople/LICENSE create mode 100644 code-challenge/node_modules/constantinople/README.md create mode 100644 code-challenge/node_modules/constantinople/index.js create mode 100644 code-challenge/node_modules/constantinople/package.json create mode 100644 code-challenge/node_modules/constantinople/test/index.js create mode 100644 code-challenge/node_modules/content-disposition/HISTORY.md create mode 100644 code-challenge/node_modules/content-disposition/LICENSE create mode 100644 code-challenge/node_modules/content-disposition/README.md create mode 100644 code-challenge/node_modules/content-disposition/index.js create mode 100644 code-challenge/node_modules/content-disposition/package.json create mode 100644 code-challenge/node_modules/content-type/HISTORY.md create mode 100644 code-challenge/node_modules/content-type/LICENSE create mode 100644 code-challenge/node_modules/content-type/README.md create mode 100644 code-challenge/node_modules/content-type/index.js create mode 100644 code-challenge/node_modules/content-type/package.json create mode 100644 code-challenge/node_modules/cookie-parser/HISTORY.md create mode 100644 code-challenge/node_modules/cookie-parser/LICENSE create mode 100644 code-challenge/node_modules/cookie-parser/README.md create mode 100644 code-challenge/node_modules/cookie-parser/index.js create mode 100644 code-challenge/node_modules/cookie-parser/package.json create mode 100644 code-challenge/node_modules/cookie-signature/.npmignore create mode 100644 code-challenge/node_modules/cookie-signature/History.md create mode 100644 code-challenge/node_modules/cookie-signature/Readme.md create mode 100644 code-challenge/node_modules/cookie-signature/index.js create mode 100644 code-challenge/node_modules/cookie-signature/package.json create mode 100644 code-challenge/node_modules/cookie/HISTORY.md create mode 100644 code-challenge/node_modules/cookie/LICENSE create mode 100644 code-challenge/node_modules/cookie/README.md create mode 100644 code-challenge/node_modules/cookie/index.js create mode 100644 code-challenge/node_modules/cookie/package.json create mode 100644 code-challenge/node_modules/cookiejar/.npmignore create mode 100644 code-challenge/node_modules/cookiejar/LICENSE create mode 100644 code-challenge/node_modules/cookiejar/cookiejar.js create mode 100644 code-challenge/node_modules/cookiejar/package.json create mode 100644 code-challenge/node_modules/cookiejar/readme.md create mode 100755 code-challenge/node_modules/cookiejar/tests/test.js create mode 100644 code-challenge/node_modules/core-util-is/LICENSE create mode 100644 code-challenge/node_modules/core-util-is/README.md create mode 100644 code-challenge/node_modules/core-util-is/float.patch create mode 100644 code-challenge/node_modules/core-util-is/lib/util.js create mode 100644 code-challenge/node_modules/core-util-is/package.json create mode 100644 code-challenge/node_modules/core-util-is/test.js create mode 100644 code-challenge/node_modules/css-parse/.npmignore create mode 100644 code-challenge/node_modules/css-parse/History.md create mode 100644 code-challenge/node_modules/css-parse/Makefile create mode 100644 code-challenge/node_modules/css-parse/Readme.md create mode 100644 code-challenge/node_modules/css-parse/component.json create mode 100644 code-challenge/node_modules/css-parse/index.js create mode 100644 code-challenge/node_modules/css-parse/package.json create mode 100644 code-challenge/node_modules/css-stringify/.npmignore create mode 100644 code-challenge/node_modules/css-stringify/History.md create mode 100644 code-challenge/node_modules/css-stringify/Makefile create mode 100644 code-challenge/node_modules/css-stringify/Readme.md create mode 100644 code-challenge/node_modules/css-stringify/component.json create mode 100644 code-challenge/node_modules/css-stringify/index.js create mode 100644 code-challenge/node_modules/css-stringify/package.json create mode 100644 code-challenge/node_modules/css/.npmignore create mode 100644 code-challenge/node_modules/css/History.md create mode 100644 code-challenge/node_modules/css/Makefile create mode 100644 code-challenge/node_modules/css/Readme.md create mode 100644 code-challenge/node_modules/css/benchmark.js create mode 100644 code-challenge/node_modules/css/component.json create mode 100644 code-challenge/node_modules/css/index.js create mode 100644 code-challenge/node_modules/css/package.json create mode 100644 code-challenge/node_modules/css/test.js create mode 100644 code-challenge/node_modules/debug/.jshintrc create mode 100644 code-challenge/node_modules/debug/.npmignore create mode 100644 code-challenge/node_modules/debug/History.md create mode 100644 code-challenge/node_modules/debug/Makefile create mode 100644 code-challenge/node_modules/debug/Readme.md create mode 100644 code-challenge/node_modules/debug/bower.json create mode 100644 code-challenge/node_modules/debug/browser.js create mode 100644 code-challenge/node_modules/debug/component.json create mode 100644 code-challenge/node_modules/debug/debug.js create mode 100644 code-challenge/node_modules/debug/node.js create mode 100644 code-challenge/node_modules/debug/package.json create mode 100644 code-challenge/node_modules/decamelize/index.js create mode 100644 code-challenge/node_modules/decamelize/license create mode 100644 code-challenge/node_modules/decamelize/package.json create mode 100644 code-challenge/node_modules/decamelize/readme.md create mode 100644 code-challenge/node_modules/delayed-stream/.npmignore create mode 100644 code-challenge/node_modules/delayed-stream/License create mode 100644 code-challenge/node_modules/delayed-stream/Makefile create mode 100644 code-challenge/node_modules/delayed-stream/Readme.md create mode 100644 code-challenge/node_modules/delayed-stream/lib/delayed_stream.js create mode 100644 code-challenge/node_modules/delayed-stream/package.json create mode 100644 code-challenge/node_modules/depd/History.md create mode 100644 code-challenge/node_modules/depd/LICENSE create mode 100644 code-challenge/node_modules/depd/Readme.md create mode 100644 code-challenge/node_modules/depd/index.js create mode 100644 code-challenge/node_modules/depd/lib/browser/index.js create mode 100644 code-challenge/node_modules/depd/lib/compat/buffer-concat.js create mode 100644 code-challenge/node_modules/depd/lib/compat/callsite-tostring.js create mode 100644 code-challenge/node_modules/depd/lib/compat/event-listener-count.js create mode 100644 code-challenge/node_modules/depd/lib/compat/index.js create mode 100644 code-challenge/node_modules/depd/package.json create mode 100644 code-challenge/node_modules/destroy/LICENSE create mode 100644 code-challenge/node_modules/destroy/README.md create mode 100644 code-challenge/node_modules/destroy/index.js create mode 100644 code-challenge/node_modules/destroy/package.json create mode 100644 code-challenge/node_modules/diff/README.md create mode 100644 code-challenge/node_modules/diff/diff.js create mode 100644 code-challenge/node_modules/diff/package.json create mode 100644 code-challenge/node_modules/ee-first/LICENSE create mode 100644 code-challenge/node_modules/ee-first/README.md create mode 100644 code-challenge/node_modules/ee-first/index.js create mode 100644 code-challenge/node_modules/ee-first/package.json create mode 100644 code-challenge/node_modules/es6-promise/CHANGELOG.md create mode 100644 code-challenge/node_modules/es6-promise/LICENSE create mode 100644 code-challenge/node_modules/es6-promise/README.md create mode 100644 code-challenge/node_modules/es6-promise/dist/es6-promise.js create mode 100644 code-challenge/node_modules/es6-promise/dist/es6-promise.map create mode 100644 code-challenge/node_modules/es6-promise/dist/es6-promise.min.js create mode 100644 code-challenge/node_modules/es6-promise/dist/es6-promise.min.map create mode 100644 code-challenge/node_modules/es6-promise/es6-promise.d.ts create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/-internal.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/asap.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/enumerator.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/polyfill.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/promise.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/promise/all.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/promise/race.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/promise/reject.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/promise/resolve.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/then.js create mode 100644 code-challenge/node_modules/es6-promise/lib/es6-promise/utils.js create mode 100644 code-challenge/node_modules/es6-promise/package.json create mode 100644 code-challenge/node_modules/escape-html/LICENSE create mode 100644 code-challenge/node_modules/escape-html/Readme.md create mode 100644 code-challenge/node_modules/escape-html/index.js create mode 100644 code-challenge/node_modules/escape-html/package.json create mode 100644 code-challenge/node_modules/escape-string-regexp/index.js create mode 100644 code-challenge/node_modules/escape-string-regexp/package.json create mode 100644 code-challenge/node_modules/escape-string-regexp/readme.md create mode 100644 code-challenge/node_modules/etag/HISTORY.md create mode 100644 code-challenge/node_modules/etag/LICENSE create mode 100644 code-challenge/node_modules/etag/README.md create mode 100644 code-challenge/node_modules/etag/index.js create mode 100644 code-challenge/node_modules/etag/package.json create mode 100644 code-challenge/node_modules/express/History.md create mode 100644 code-challenge/node_modules/express/LICENSE create mode 100644 code-challenge/node_modules/express/Readme.md create mode 100644 code-challenge/node_modules/express/index.js create mode 100644 code-challenge/node_modules/express/lib/application.js create mode 100644 code-challenge/node_modules/express/lib/express.js create mode 100644 code-challenge/node_modules/express/lib/middleware/init.js create mode 100644 code-challenge/node_modules/express/lib/middleware/query.js create mode 100644 code-challenge/node_modules/express/lib/request.js create mode 100644 code-challenge/node_modules/express/lib/response.js create mode 100644 code-challenge/node_modules/express/lib/router/index.js create mode 100644 code-challenge/node_modules/express/lib/router/layer.js create mode 100644 code-challenge/node_modules/express/lib/router/route.js create mode 100644 code-challenge/node_modules/express/lib/utils.js create mode 100644 code-challenge/node_modules/express/lib/view.js create mode 100644 code-challenge/node_modules/express/node_modules/cookie/HISTORY.md create mode 100644 code-challenge/node_modules/express/node_modules/cookie/LICENSE create mode 100644 code-challenge/node_modules/express/node_modules/cookie/README.md create mode 100644 code-challenge/node_modules/express/node_modules/cookie/index.js create mode 100644 code-challenge/node_modules/express/node_modules/cookie/package.json create mode 100644 code-challenge/node_modules/express/node_modules/qs/.eslintignore create mode 100644 code-challenge/node_modules/express/node_modules/qs/.npmignore create mode 100644 code-challenge/node_modules/express/node_modules/qs/.travis.yml create mode 100644 code-challenge/node_modules/express/node_modules/qs/CHANGELOG.md create mode 100644 code-challenge/node_modules/express/node_modules/qs/CONTRIBUTING.md create mode 100644 code-challenge/node_modules/express/node_modules/qs/LICENSE create mode 100644 code-challenge/node_modules/express/node_modules/qs/README.md create mode 100644 code-challenge/node_modules/express/node_modules/qs/bower.json create mode 100644 code-challenge/node_modules/express/node_modules/qs/lib/index.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/lib/parse.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/lib/stringify.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/lib/utils.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/package.json create mode 100644 code-challenge/node_modules/express/node_modules/qs/test/parse.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/test/stringify.js create mode 100644 code-challenge/node_modules/express/node_modules/qs/test/utils.js create mode 100644 code-challenge/node_modules/express/package.json create mode 100644 code-challenge/node_modules/extend/.eslintrc create mode 100644 code-challenge/node_modules/extend/.jscs.json create mode 100644 code-challenge/node_modules/extend/.npmignore create mode 100644 code-challenge/node_modules/extend/.travis.yml create mode 100644 code-challenge/node_modules/extend/CHANGELOG.md create mode 100644 code-challenge/node_modules/extend/LICENSE create mode 100644 code-challenge/node_modules/extend/README.md create mode 100644 code-challenge/node_modules/extend/component.json create mode 100644 code-challenge/node_modules/extend/index.js create mode 100644 code-challenge/node_modules/extend/package.json create mode 100644 code-challenge/node_modules/finalhandler/HISTORY.md create mode 100644 code-challenge/node_modules/finalhandler/LICENSE create mode 100644 code-challenge/node_modules/finalhandler/README.md create mode 100644 code-challenge/node_modules/finalhandler/index.js create mode 100644 code-challenge/node_modules/finalhandler/package.json create mode 100644 code-challenge/node_modules/follow-redirects/README.md create mode 100644 code-challenge/node_modules/follow-redirects/create.js create mode 100644 code-challenge/node_modules/follow-redirects/http.js create mode 100644 code-challenge/node_modules/follow-redirects/https.js create mode 100644 code-challenge/node_modules/follow-redirects/index.js create mode 100644 code-challenge/node_modules/follow-redirects/package.json create mode 100644 code-challenge/node_modules/form-data/.dockerignore create mode 100644 code-challenge/node_modules/form-data/.editorconfig create mode 100644 code-challenge/node_modules/form-data/.eslintignore create mode 100644 code-challenge/node_modules/form-data/.eslintrc create mode 100644 code-challenge/node_modules/form-data/License create mode 100644 code-challenge/node_modules/form-data/README.md create mode 100644 code-challenge/node_modules/form-data/lib/browser.js create mode 100644 code-challenge/node_modules/form-data/lib/form_data.js create mode 100644 code-challenge/node_modules/form-data/lib/populate.js create mode 100644 code-challenge/node_modules/form-data/node_modules/async/README.md create mode 100644 code-challenge/node_modules/form-data/node_modules/async/dist/async.js create mode 100644 code-challenge/node_modules/form-data/node_modules/async/dist/async.min.js create mode 100644 code-challenge/node_modules/form-data/node_modules/async/lib/async.js create mode 100644 code-challenge/node_modules/form-data/node_modules/async/package.json create mode 100644 code-challenge/node_modules/form-data/package.json create mode 100644 code-challenge/node_modules/form-data/wercker.yml create mode 100644 code-challenge/node_modules/formidable/.npmignore create mode 100644 code-challenge/node_modules/formidable/.travis.yml create mode 100644 code-challenge/node_modules/formidable/LICENSE create mode 100644 code-challenge/node_modules/formidable/Readme.md create mode 100644 code-challenge/node_modules/formidable/index.js create mode 100644 code-challenge/node_modules/formidable/lib/file.js create mode 100644 code-challenge/node_modules/formidable/lib/incoming_form.js create mode 100644 code-challenge/node_modules/formidable/lib/index.js create mode 100644 code-challenge/node_modules/formidable/lib/json_parser.js create mode 100644 code-challenge/node_modules/formidable/lib/multipart_parser.js create mode 100644 code-challenge/node_modules/formidable/lib/octet_parser.js create mode 100644 code-challenge/node_modules/formidable/lib/querystring_parser.js create mode 100644 code-challenge/node_modules/formidable/package.json create mode 100644 code-challenge/node_modules/forwarded/HISTORY.md create mode 100644 code-challenge/node_modules/forwarded/LICENSE create mode 100644 code-challenge/node_modules/forwarded/README.md create mode 100644 code-challenge/node_modules/forwarded/index.js create mode 100644 code-challenge/node_modules/forwarded/package.json create mode 100644 code-challenge/node_modules/fresh/HISTORY.md create mode 100644 code-challenge/node_modules/fresh/LICENSE create mode 100644 code-challenge/node_modules/fresh/README.md create mode 100644 code-challenge/node_modules/fresh/index.js create mode 100644 code-challenge/node_modules/fresh/package.json create mode 100644 code-challenge/node_modules/fs.realpath/README.md create mode 100644 code-challenge/node_modules/fs.realpath/index.js create mode 100644 code-challenge/node_modules/fs.realpath/old.js create mode 100644 code-challenge/node_modules/fs.realpath/package.json create mode 100644 code-challenge/node_modules/github-api/CHANGELOG.md create mode 100644 code-challenge/node_modules/github-api/LICENSE create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.bundle.js create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.bundle.js.map create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.bundle.min.js create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.bundle.min.js.map create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.js create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.js.map create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.min.js create mode 100644 code-challenge/node_modules/github-api/dist/GitHub.min.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Gist.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Gist.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/GitHub.js create mode 100644 code-challenge/node_modules/github-api/dist/components/GitHub.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Issue.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Issue.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Markdown.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Markdown.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Organization.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Organization.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/RateLimit.js create mode 100644 code-challenge/node_modules/github-api/dist/components/RateLimit.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Repository.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Repository.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Requestable.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Requestable.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Search.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Search.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/Team.js create mode 100644 code-challenge/node_modules/github-api/dist/components/Team.js.map create mode 100644 code-challenge/node_modules/github-api/dist/components/User.js create mode 100644 code-challenge/node_modules/github-api/dist/components/User.js.map create mode 100644 code-challenge/node_modules/github-api/lib/Gist.js create mode 100644 code-challenge/node_modules/github-api/lib/GitHub.js create mode 100644 code-challenge/node_modules/github-api/lib/Issue.js create mode 100644 code-challenge/node_modules/github-api/lib/Markdown.js create mode 100644 code-challenge/node_modules/github-api/lib/Organization.js create mode 100644 code-challenge/node_modules/github-api/lib/RateLimit.js create mode 100644 code-challenge/node_modules/github-api/lib/Repository.js create mode 100644 code-challenge/node_modules/github-api/lib/Requestable.js create mode 100644 code-challenge/node_modules/github-api/lib/Search.js create mode 100644 code-challenge/node_modules/github-api/lib/Team.js create mode 100644 code-challenge/node_modules/github-api/lib/User.js create mode 100644 code-challenge/node_modules/github-api/package.json create mode 100644 code-challenge/node_modules/glob/README.md create mode 100644 code-challenge/node_modules/glob/common.js create mode 100644 code-challenge/node_modules/glob/glob.js create mode 100644 code-challenge/node_modules/glob/package.json create mode 100644 code-challenge/node_modules/glob/sync.js create mode 100644 code-challenge/node_modules/graceful-readlink/.npmignore create mode 100644 code-challenge/node_modules/graceful-readlink/.travis.yml create mode 100644 code-challenge/node_modules/graceful-readlink/LICENSE create mode 100644 code-challenge/node_modules/graceful-readlink/README.md create mode 100644 code-challenge/node_modules/graceful-readlink/index.js create mode 100644 code-challenge/node_modules/graceful-readlink/package.json create mode 100644 code-challenge/node_modules/growl/History.md create mode 100644 code-challenge/node_modules/growl/Readme.md create mode 100644 code-challenge/node_modules/growl/lib/growl.js create mode 100644 code-challenge/node_modules/growl/package.json create mode 100644 code-challenge/node_modules/growl/test.js create mode 100644 code-challenge/node_modules/has-flag/index.js create mode 100644 code-challenge/node_modules/has-flag/license create mode 100644 code-challenge/node_modules/has-flag/package.json create mode 100644 code-challenge/node_modules/has-flag/readme.md create mode 100644 code-challenge/node_modules/http-errors/HISTORY.md create mode 100644 code-challenge/node_modules/http-errors/LICENSE create mode 100644 code-challenge/node_modules/http-errors/README.md create mode 100644 code-challenge/node_modules/http-errors/index.js create mode 100644 code-challenge/node_modules/http-errors/package.json create mode 100644 code-challenge/node_modules/iconv-lite/.npmignore create mode 100644 code-challenge/node_modules/iconv-lite/.travis.yml create mode 100644 code-challenge/node_modules/iconv-lite/Changelog.md create mode 100644 code-challenge/node_modules/iconv-lite/LICENSE create mode 100644 code-challenge/node_modules/iconv-lite/README.md create mode 100644 code-challenge/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/index.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/internal.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 code-challenge/node_modules/iconv-lite/encodings/utf16.js create mode 100644 code-challenge/node_modules/iconv-lite/encodings/utf7.js create mode 100644 code-challenge/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 code-challenge/node_modules/iconv-lite/lib/extend-node.js create mode 100644 code-challenge/node_modules/iconv-lite/lib/index.js create mode 100644 code-challenge/node_modules/iconv-lite/lib/streams.js create mode 100644 code-challenge/node_modules/iconv-lite/package.json create mode 100644 code-challenge/node_modules/inflight/LICENSE create mode 100644 code-challenge/node_modules/inflight/README.md create mode 100644 code-challenge/node_modules/inflight/inflight.js create mode 100644 code-challenge/node_modules/inflight/package.json create mode 100644 code-challenge/node_modules/inherits/LICENSE create mode 100644 code-challenge/node_modules/inherits/README.md create mode 100644 code-challenge/node_modules/inherits/inherits.js create mode 100644 code-challenge/node_modules/inherits/inherits_browser.js create mode 100644 code-challenge/node_modules/inherits/package.json create mode 100644 code-challenge/node_modules/inherits/test.js create mode 100644 code-challenge/node_modules/ipaddr.js/.npmignore create mode 100644 code-challenge/node_modules/ipaddr.js/.travis.yml create mode 100644 code-challenge/node_modules/ipaddr.js/Cakefile create mode 100644 code-challenge/node_modules/ipaddr.js/LICENSE create mode 100644 code-challenge/node_modules/ipaddr.js/README.md create mode 100644 code-challenge/node_modules/ipaddr.js/bower.json create mode 100644 code-challenge/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 code-challenge/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 code-challenge/node_modules/ipaddr.js/package.json create mode 100644 code-challenge/node_modules/ipaddr.js/src/ipaddr.coffee create mode 100644 code-challenge/node_modules/ipaddr.js/test/ipaddr.test.coffee create mode 100644 code-challenge/node_modules/is-buffer/.travis.yml create mode 100644 code-challenge/node_modules/is-buffer/.zuul.yml create mode 100644 code-challenge/node_modules/is-buffer/LICENSE create mode 100644 code-challenge/node_modules/is-buffer/README.md create mode 100644 code-challenge/node_modules/is-buffer/index.js create mode 100644 code-challenge/node_modules/is-buffer/package.json create mode 100644 code-challenge/node_modules/is-buffer/test/basic.js create mode 100644 code-challenge/node_modules/is-promise/.npmignore create mode 100644 code-challenge/node_modules/is-promise/.travis.yml create mode 100644 code-challenge/node_modules/is-promise/LICENSE create mode 100644 code-challenge/node_modules/is-promise/index.js create mode 100644 code-challenge/node_modules/is-promise/package.json create mode 100644 code-challenge/node_modules/is-promise/readme.md create mode 100644 code-challenge/node_modules/isarray/.npmignore create mode 100644 code-challenge/node_modules/isarray/.travis.yml create mode 100644 code-challenge/node_modules/isarray/Makefile create mode 100644 code-challenge/node_modules/isarray/README.md create mode 100644 code-challenge/node_modules/isarray/component.json create mode 100644 code-challenge/node_modules/isarray/index.js create mode 100644 code-challenge/node_modules/isarray/package.json create mode 100644 code-challenge/node_modules/isarray/test.js create mode 100644 code-challenge/node_modules/jade/.npmignore create mode 100644 code-challenge/node_modules/jade/.release.json create mode 100644 code-challenge/node_modules/jade/History.md create mode 100644 code-challenge/node_modules/jade/LICENSE create mode 100644 code-challenge/node_modules/jade/README.md create mode 100644 code-challenge/node_modules/jade/Readme_zh-cn.md create mode 100755 code-challenge/node_modules/jade/bin/jade.js create mode 100644 code-challenge/node_modules/jade/block-code.html create mode 100644 code-challenge/node_modules/jade/component.json create mode 100644 code-challenge/node_modules/jade/jade.js create mode 100644 code-challenge/node_modules/jade/lib/compiler.js create mode 100644 code-challenge/node_modules/jade/lib/doctypes.js create mode 100644 code-challenge/node_modules/jade/lib/filters-client.js create mode 100644 code-challenge/node_modules/jade/lib/filters.js create mode 100644 code-challenge/node_modules/jade/lib/index.js create mode 100644 code-challenge/node_modules/jade/lib/inline-tags.js create mode 100644 code-challenge/node_modules/jade/lib/lexer.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/attrs.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/block-comment.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/block.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/case.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/code.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/comment.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/doctype.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/each.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/filter.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/index.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/literal.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/mixin-block.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/mixin.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/node.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/tag.js create mode 100644 code-challenge/node_modules/jade/lib/nodes/text.js create mode 100644 code-challenge/node_modules/jade/lib/parser.js create mode 100644 code-challenge/node_modules/jade/lib/runtime.js create mode 100644 code-challenge/node_modules/jade/lib/utils.js create mode 100644 code-challenge/node_modules/jade/package.json create mode 100644 code-challenge/node_modules/jade/release.js create mode 100644 code-challenge/node_modules/jade/runtime.js create mode 100644 code-challenge/node_modules/js-base64/.npmignore create mode 100644 code-challenge/node_modules/js-base64/.travis.yml create mode 100644 code-challenge/node_modules/js-base64/LICENSE.md create mode 100644 code-challenge/node_modules/js-base64/README.md create mode 100644 code-challenge/node_modules/js-base64/base64.html create mode 100644 code-challenge/node_modules/js-base64/base64.js create mode 100644 code-challenge/node_modules/js-base64/base64.min.js create mode 100644 code-challenge/node_modules/js-base64/base64_utf8 create mode 100644 code-challenge/node_modules/js-base64/bower.json create mode 100644 code-challenge/node_modules/js-base64/old/base64-1.7.js create mode 100644 code-challenge/node_modules/js-base64/package.js create mode 100644 code-challenge/node_modules/js-base64/package.json create mode 100644 code-challenge/node_modules/js-base64/test/dankogai.js create mode 100644 code-challenge/node_modules/js-base64/test/es5.js create mode 100644 code-challenge/node_modules/js-base64/test/index.html create mode 100644 code-challenge/node_modules/js-base64/test/large.js create mode 100644 code-challenge/node_modules/js-base64/test/yoshinoya.js create mode 100644 code-challenge/node_modules/json3/LICENSE create mode 100644 code-challenge/node_modules/json3/README.md create mode 100644 code-challenge/node_modules/json3/lib/json3.js create mode 100644 code-challenge/node_modules/json3/lib/json3.min.js create mode 100644 code-challenge/node_modules/json3/package.json create mode 100644 code-challenge/node_modules/jstransformer/LICENSE create mode 100644 code-challenge/node_modules/jstransformer/README.md create mode 100644 code-challenge/node_modules/jstransformer/index.js create mode 100644 code-challenge/node_modules/jstransformer/package.json create mode 100644 code-challenge/node_modules/kind-of/LICENSE create mode 100644 code-challenge/node_modules/kind-of/README.md create mode 100644 code-challenge/node_modules/kind-of/index.js create mode 100644 code-challenge/node_modules/kind-of/package.json create mode 100644 code-challenge/node_modules/lazy-cache/LICENSE create mode 100644 code-challenge/node_modules/lazy-cache/README.md create mode 100644 code-challenge/node_modules/lazy-cache/index.js create mode 100644 code-challenge/node_modules/lazy-cache/package.json create mode 100644 code-challenge/node_modules/lodash._baseassign/LICENSE.txt create mode 100644 code-challenge/node_modules/lodash._baseassign/README.md create mode 100644 code-challenge/node_modules/lodash._baseassign/index.js create mode 100644 code-challenge/node_modules/lodash._baseassign/package.json create mode 100644 code-challenge/node_modules/lodash._basecopy/LICENSE.txt create mode 100644 code-challenge/node_modules/lodash._basecopy/README.md create mode 100644 code-challenge/node_modules/lodash._basecopy/index.js create mode 100644 code-challenge/node_modules/lodash._basecopy/package.json create mode 100644 code-challenge/node_modules/lodash._basecreate/LICENSE create mode 100644 code-challenge/node_modules/lodash._basecreate/README.md create mode 100644 code-challenge/node_modules/lodash._basecreate/index.js create mode 100644 code-challenge/node_modules/lodash._basecreate/package.json create mode 100644 code-challenge/node_modules/lodash._getnative/LICENSE create mode 100644 code-challenge/node_modules/lodash._getnative/README.md create mode 100644 code-challenge/node_modules/lodash._getnative/index.js create mode 100644 code-challenge/node_modules/lodash._getnative/package.json create mode 100644 code-challenge/node_modules/lodash._isiterateecall/LICENSE.txt create mode 100644 code-challenge/node_modules/lodash._isiterateecall/README.md create mode 100644 code-challenge/node_modules/lodash._isiterateecall/index.js create mode 100644 code-challenge/node_modules/lodash._isiterateecall/package.json create mode 100644 code-challenge/node_modules/lodash.create/LICENSE create mode 100644 code-challenge/node_modules/lodash.create/README.md create mode 100644 code-challenge/node_modules/lodash.create/index.js create mode 100644 code-challenge/node_modules/lodash.create/package.json create mode 100644 code-challenge/node_modules/lodash.isarguments/LICENSE create mode 100644 code-challenge/node_modules/lodash.isarguments/README.md create mode 100644 code-challenge/node_modules/lodash.isarguments/index.js create mode 100644 code-challenge/node_modules/lodash.isarguments/package.json create mode 100644 code-challenge/node_modules/lodash.isarray/LICENSE create mode 100644 code-challenge/node_modules/lodash.isarray/README.md create mode 100644 code-challenge/node_modules/lodash.isarray/index.js create mode 100644 code-challenge/node_modules/lodash.isarray/package.json create mode 100644 code-challenge/node_modules/lodash.keys/LICENSE create mode 100644 code-challenge/node_modules/lodash.keys/README.md create mode 100644 code-challenge/node_modules/lodash.keys/index.js create mode 100644 code-challenge/node_modules/lodash.keys/package.json create mode 100644 code-challenge/node_modules/longest/LICENSE create mode 100644 code-challenge/node_modules/longest/README.md create mode 100644 code-challenge/node_modules/longest/index.js create mode 100644 code-challenge/node_modules/longest/package.json create mode 100644 code-challenge/node_modules/media-typer/HISTORY.md create mode 100644 code-challenge/node_modules/media-typer/LICENSE create mode 100644 code-challenge/node_modules/media-typer/README.md create mode 100644 code-challenge/node_modules/media-typer/index.js create mode 100644 code-challenge/node_modules/media-typer/package.json create mode 100644 code-challenge/node_modules/merge-descriptors/HISTORY.md create mode 100644 code-challenge/node_modules/merge-descriptors/LICENSE create mode 100644 code-challenge/node_modules/merge-descriptors/README.md create mode 100644 code-challenge/node_modules/merge-descriptors/index.js create mode 100644 code-challenge/node_modules/merge-descriptors/package.json create mode 100644 code-challenge/node_modules/methods/HISTORY.md create mode 100644 code-challenge/node_modules/methods/LICENSE create mode 100644 code-challenge/node_modules/methods/README.md create mode 100644 code-challenge/node_modules/methods/index.js create mode 100644 code-challenge/node_modules/methods/package.json create mode 100644 code-challenge/node_modules/mime-db/HISTORY.md create mode 100644 code-challenge/node_modules/mime-db/LICENSE create mode 100644 code-challenge/node_modules/mime-db/README.md create mode 100644 code-challenge/node_modules/mime-db/db.json create mode 100644 code-challenge/node_modules/mime-db/index.js create mode 100644 code-challenge/node_modules/mime-db/package.json create mode 100644 code-challenge/node_modules/mime-types/HISTORY.md create mode 100644 code-challenge/node_modules/mime-types/LICENSE create mode 100644 code-challenge/node_modules/mime-types/README.md create mode 100644 code-challenge/node_modules/mime-types/index.js create mode 100644 code-challenge/node_modules/mime-types/package.json create mode 100644 code-challenge/node_modules/mime/.npmignore create mode 100644 code-challenge/node_modules/mime/LICENSE create mode 100644 code-challenge/node_modules/mime/README.md create mode 100644 code-challenge/node_modules/mime/build/build.js create mode 100644 code-challenge/node_modules/mime/build/test.js create mode 100755 code-challenge/node_modules/mime/cli.js create mode 100644 code-challenge/node_modules/mime/mime.js create mode 100644 code-challenge/node_modules/mime/package.json create mode 100644 code-challenge/node_modules/mime/types.json create mode 100644 code-challenge/node_modules/minimatch/README.md create mode 100644 code-challenge/node_modules/minimatch/minimatch.js create mode 100644 code-challenge/node_modules/minimatch/package.json create mode 100644 code-challenge/node_modules/minimist/.travis.yml create mode 100644 code-challenge/node_modules/minimist/LICENSE create mode 100644 code-challenge/node_modules/minimist/example/parse.js create mode 100644 code-challenge/node_modules/minimist/index.js create mode 100644 code-challenge/node_modules/minimist/package.json create mode 100644 code-challenge/node_modules/minimist/readme.markdown create mode 100644 code-challenge/node_modules/minimist/test/dash.js create mode 100644 code-challenge/node_modules/minimist/test/default_bool.js create mode 100644 code-challenge/node_modules/minimist/test/dotted.js create mode 100644 code-challenge/node_modules/minimist/test/long.js create mode 100644 code-challenge/node_modules/minimist/test/parse.js create mode 100644 code-challenge/node_modules/minimist/test/parse_modified.js create mode 100644 code-challenge/node_modules/minimist/test/short.js create mode 100644 code-challenge/node_modules/minimist/test/whitespace.js create mode 100644 code-challenge/node_modules/mkdirp/.travis.yml create mode 100644 code-challenge/node_modules/mkdirp/LICENSE create mode 100755 code-challenge/node_modules/mkdirp/bin/cmd.js create mode 100644 code-challenge/node_modules/mkdirp/bin/usage.txt create mode 100644 code-challenge/node_modules/mkdirp/examples/pow.js create mode 100644 code-challenge/node_modules/mkdirp/index.js create mode 100644 code-challenge/node_modules/mkdirp/package.json create mode 100644 code-challenge/node_modules/mkdirp/readme.markdown create mode 100644 code-challenge/node_modules/mkdirp/test/chmod.js create mode 100644 code-challenge/node_modules/mkdirp/test/clobber.js create mode 100644 code-challenge/node_modules/mkdirp/test/mkdirp.js create mode 100644 code-challenge/node_modules/mkdirp/test/opts_fs.js create mode 100644 code-challenge/node_modules/mkdirp/test/opts_fs_sync.js create mode 100644 code-challenge/node_modules/mkdirp/test/perm.js create mode 100644 code-challenge/node_modules/mkdirp/test/perm_sync.js create mode 100644 code-challenge/node_modules/mkdirp/test/race.js create mode 100644 code-challenge/node_modules/mkdirp/test/rel.js create mode 100644 code-challenge/node_modules/mkdirp/test/return.js create mode 100644 code-challenge/node_modules/mkdirp/test/return_sync.js create mode 100644 code-challenge/node_modules/mkdirp/test/root.js create mode 100644 code-challenge/node_modules/mkdirp/test/sync.js create mode 100644 code-challenge/node_modules/mkdirp/test/umask.js create mode 100644 code-challenge/node_modules/mkdirp/test/umask_sync.js create mode 100644 code-challenge/node_modules/mocha/CHANGELOG.md create mode 100644 code-challenge/node_modules/mocha/LICENSE create mode 100644 code-challenge/node_modules/mocha/README.md create mode 100644 code-challenge/node_modules/mocha/bin/.eslintrc create mode 100755 code-challenge/node_modules/mocha/bin/_mocha create mode 100755 code-challenge/node_modules/mocha/bin/mocha create mode 100644 code-challenge/node_modules/mocha/bin/options.js create mode 100644 code-challenge/node_modules/mocha/bower.json create mode 100644 code-challenge/node_modules/mocha/browser-entry.js create mode 100644 code-challenge/node_modules/mocha/images/error.png create mode 100644 code-challenge/node_modules/mocha/images/ok.png create mode 100644 code-challenge/node_modules/mocha/index.js create mode 100644 code-challenge/node_modules/mocha/lib/browser/.eslintrc.yaml create mode 100644 code-challenge/node_modules/mocha/lib/browser/debug.js create mode 100644 code-challenge/node_modules/mocha/lib/browser/events.js create mode 100644 code-challenge/node_modules/mocha/lib/browser/progress.js create mode 100644 code-challenge/node_modules/mocha/lib/browser/tty.js create mode 100644 code-challenge/node_modules/mocha/lib/context.js create mode 100644 code-challenge/node_modules/mocha/lib/hook.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/bdd.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/common.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/exports.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/index.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/qunit.js create mode 100644 code-challenge/node_modules/mocha/lib/interfaces/tdd.js create mode 100644 code-challenge/node_modules/mocha/lib/mocha.js create mode 100644 code-challenge/node_modules/mocha/lib/ms.js create mode 100644 code-challenge/node_modules/mocha/lib/pending.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/base.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/doc.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/dot.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/html.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/index.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/json-stream.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/json.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/landing.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/list.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/markdown.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/min.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/nyan.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/progress.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/spec.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/tap.js create mode 100644 code-challenge/node_modules/mocha/lib/reporters/xunit.js create mode 100644 code-challenge/node_modules/mocha/lib/runnable.js create mode 100644 code-challenge/node_modules/mocha/lib/runner.js create mode 100644 code-challenge/node_modules/mocha/lib/suite.js create mode 100644 code-challenge/node_modules/mocha/lib/template.html create mode 100644 code-challenge/node_modules/mocha/lib/test.js create mode 100644 code-challenge/node_modules/mocha/lib/to-iso-string/LICENSE create mode 100644 code-challenge/node_modules/mocha/lib/to-iso-string/index.js create mode 100644 code-challenge/node_modules/mocha/lib/utils.js create mode 100644 code-challenge/node_modules/mocha/lib/utils.js.orig create mode 100644 code-challenge/node_modules/mocha/mocha.css create mode 100644 code-challenge/node_modules/mocha/mocha.js create mode 100644 code-challenge/node_modules/mocha/node_modules/commander/Readme.md create mode 100644 code-challenge/node_modules/mocha/node_modules/commander/index.js create mode 100644 code-challenge/node_modules/mocha/node_modules/commander/package.json create mode 100644 code-challenge/node_modules/mocha/package.json create mode 100644 code-challenge/node_modules/morgan/HISTORY.md create mode 100644 code-challenge/node_modules/morgan/LICENSE create mode 100644 code-challenge/node_modules/morgan/README.md create mode 100644 code-challenge/node_modules/morgan/index.js create mode 100644 code-challenge/node_modules/morgan/package.json create mode 100644 code-challenge/node_modules/ms/.npmignore create mode 100644 code-challenge/node_modules/ms/LICENSE create mode 100644 code-challenge/node_modules/ms/README.md create mode 100644 code-challenge/node_modules/ms/index.js create mode 100644 code-challenge/node_modules/ms/package.json create mode 100644 code-challenge/node_modules/negotiator/HISTORY.md create mode 100644 code-challenge/node_modules/negotiator/LICENSE create mode 100644 code-challenge/node_modules/negotiator/README.md create mode 100644 code-challenge/node_modules/negotiator/index.js create mode 100644 code-challenge/node_modules/negotiator/lib/charset.js create mode 100644 code-challenge/node_modules/negotiator/lib/encoding.js create mode 100644 code-challenge/node_modules/negotiator/lib/language.js create mode 100644 code-challenge/node_modules/negotiator/lib/mediaType.js create mode 100644 code-challenge/node_modules/negotiator/package.json create mode 100644 code-challenge/node_modules/on-finished/HISTORY.md create mode 100644 code-challenge/node_modules/on-finished/LICENSE create mode 100644 code-challenge/node_modules/on-finished/README.md create mode 100644 code-challenge/node_modules/on-finished/index.js create mode 100644 code-challenge/node_modules/on-finished/package.json create mode 100644 code-challenge/node_modules/on-headers/HISTORY.md create mode 100644 code-challenge/node_modules/on-headers/LICENSE create mode 100644 code-challenge/node_modules/on-headers/README.md create mode 100644 code-challenge/node_modules/on-headers/index.js create mode 100644 code-challenge/node_modules/on-headers/package.json create mode 100644 code-challenge/node_modules/once/LICENSE create mode 100644 code-challenge/node_modules/once/README.md create mode 100644 code-challenge/node_modules/once/once.js create mode 100644 code-challenge/node_modules/once/package.json create mode 100644 code-challenge/node_modules/optimist/.travis.yml create mode 100644 code-challenge/node_modules/optimist/LICENSE create mode 100644 code-challenge/node_modules/optimist/example/bool.js create mode 100644 code-challenge/node_modules/optimist/example/boolean_double.js create mode 100644 code-challenge/node_modules/optimist/example/boolean_single.js create mode 100644 code-challenge/node_modules/optimist/example/default_hash.js create mode 100644 code-challenge/node_modules/optimist/example/default_singles.js create mode 100644 code-challenge/node_modules/optimist/example/divide.js create mode 100644 code-challenge/node_modules/optimist/example/line_count.js create mode 100644 code-challenge/node_modules/optimist/example/line_count_options.js create mode 100644 code-challenge/node_modules/optimist/example/line_count_wrap.js create mode 100644 code-challenge/node_modules/optimist/example/nonopt.js create mode 100644 code-challenge/node_modules/optimist/example/reflect.js create mode 100644 code-challenge/node_modules/optimist/example/short.js create mode 100644 code-challenge/node_modules/optimist/example/string.js create mode 100644 code-challenge/node_modules/optimist/example/usage-options.js create mode 100644 code-challenge/node_modules/optimist/example/xup.js create mode 100644 code-challenge/node_modules/optimist/index.js create mode 100644 code-challenge/node_modules/optimist/package.json create mode 100644 code-challenge/node_modules/optimist/readme.markdown create mode 100644 code-challenge/node_modules/optimist/test/_.js create mode 100644 code-challenge/node_modules/optimist/test/_/argv.js create mode 100755 code-challenge/node_modules/optimist/test/_/bin.js create mode 100644 code-challenge/node_modules/optimist/test/parse.js create mode 100644 code-challenge/node_modules/optimist/test/usage.js create mode 100644 code-challenge/node_modules/parseurl/HISTORY.md create mode 100644 code-challenge/node_modules/parseurl/LICENSE create mode 100644 code-challenge/node_modules/parseurl/README.md create mode 100644 code-challenge/node_modules/parseurl/index.js create mode 100644 code-challenge/node_modules/parseurl/package.json create mode 100644 code-challenge/node_modules/path-is-absolute/index.js create mode 100644 code-challenge/node_modules/path-is-absolute/license create mode 100644 code-challenge/node_modules/path-is-absolute/package.json create mode 100644 code-challenge/node_modules/path-is-absolute/readme.md create mode 100644 code-challenge/node_modules/path-to-regexp/LICENSE create mode 100644 code-challenge/node_modules/path-to-regexp/Readme.md create mode 100644 code-challenge/node_modules/path-to-regexp/index.js create mode 100644 code-challenge/node_modules/path-to-regexp/package.json create mode 100644 code-challenge/node_modules/process-nextick-args/.travis.yml create mode 100644 code-challenge/node_modules/process-nextick-args/index.js create mode 100644 code-challenge/node_modules/process-nextick-args/license.md create mode 100644 code-challenge/node_modules/process-nextick-args/package.json create mode 100644 code-challenge/node_modules/process-nextick-args/readme.md create mode 100644 code-challenge/node_modules/process-nextick-args/test.js create mode 100644 code-challenge/node_modules/promise/.jshintrc create mode 100644 code-challenge/node_modules/promise/.npmignore create mode 100644 code-challenge/node_modules/promise/LICENSE create mode 100644 code-challenge/node_modules/promise/Readme.md create mode 100644 code-challenge/node_modules/promise/core.js create mode 100644 code-challenge/node_modules/promise/index.js create mode 100644 code-challenge/node_modules/promise/lib/core.js create mode 100644 code-challenge/node_modules/promise/lib/done.js create mode 100644 code-challenge/node_modules/promise/lib/es6-extensions.js create mode 100644 code-challenge/node_modules/promise/lib/node-extensions.js create mode 100644 code-challenge/node_modules/promise/package.json create mode 100644 code-challenge/node_modules/promise/polyfill-done.js create mode 100644 code-challenge/node_modules/promise/polyfill.js create mode 100644 code-challenge/node_modules/proxy-addr/HISTORY.md create mode 100644 code-challenge/node_modules/proxy-addr/LICENSE create mode 100644 code-challenge/node_modules/proxy-addr/README.md create mode 100644 code-challenge/node_modules/proxy-addr/index.js create mode 100644 code-challenge/node_modules/proxy-addr/package.json create mode 100644 code-challenge/node_modules/qs/.eslintignore create mode 100644 code-challenge/node_modules/qs/.eslintrc create mode 100644 code-challenge/node_modules/qs/.jscs.json create mode 100644 code-challenge/node_modules/qs/CHANGELOG.md create mode 100644 code-challenge/node_modules/qs/CONTRIBUTING.md create mode 100644 code-challenge/node_modules/qs/LICENSE create mode 100644 code-challenge/node_modules/qs/dist/qs.js create mode 100755 code-challenge/node_modules/qs/lib/index.js create mode 100755 code-challenge/node_modules/qs/lib/parse.js create mode 100755 code-challenge/node_modules/qs/lib/stringify.js create mode 100755 code-challenge/node_modules/qs/lib/utils.js create mode 100644 code-challenge/node_modules/qs/package.json create mode 100644 code-challenge/node_modules/qs/test/index.js create mode 100755 code-challenge/node_modules/qs/test/parse.js create mode 100755 code-challenge/node_modules/qs/test/stringify.js create mode 100755 code-challenge/node_modules/qs/test/utils.js create mode 100644 code-challenge/node_modules/range-parser/HISTORY.md create mode 100644 code-challenge/node_modules/range-parser/LICENSE create mode 100644 code-challenge/node_modules/range-parser/README.md create mode 100644 code-challenge/node_modules/range-parser/index.js create mode 100644 code-challenge/node_modules/range-parser/package.json create mode 100644 code-challenge/node_modules/raw-body/HISTORY.md create mode 100644 code-challenge/node_modules/raw-body/LICENSE create mode 100644 code-challenge/node_modules/raw-body/README.md create mode 100644 code-challenge/node_modules/raw-body/index.js create mode 100644 code-challenge/node_modules/raw-body/package.json create mode 100644 code-challenge/node_modules/readable-stream/.npmignore create mode 100644 code-challenge/node_modules/readable-stream/.travis.yml create mode 100644 code-challenge/node_modules/readable-stream/LICENSE create mode 100644 code-challenge/node_modules/readable-stream/README.md create mode 100644 code-challenge/node_modules/readable-stream/doc/stream.md create mode 100644 code-challenge/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md create mode 100644 code-challenge/node_modules/readable-stream/duplex.js create mode 100644 code-challenge/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 code-challenge/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 code-challenge/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 code-challenge/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 code-challenge/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 code-challenge/node_modules/readable-stream/lib/internal/streams/BufferList.js create mode 100644 code-challenge/node_modules/readable-stream/package.json create mode 100644 code-challenge/node_modules/readable-stream/passthrough.js create mode 100644 code-challenge/node_modules/readable-stream/readable.js create mode 100644 code-challenge/node_modules/readable-stream/transform.js create mode 100644 code-challenge/node_modules/readable-stream/writable.js create mode 100644 code-challenge/node_modules/repeat-string/README.md create mode 100644 code-challenge/node_modules/repeat-string/index.js create mode 100644 code-challenge/node_modules/repeat-string/package.json create mode 100644 code-challenge/node_modules/right-align/LICENSE create mode 100644 code-challenge/node_modules/right-align/README.md create mode 100644 code-challenge/node_modules/right-align/index.js create mode 100644 code-challenge/node_modules/right-align/package.json create mode 100644 code-challenge/node_modules/send/HISTORY.md create mode 100644 code-challenge/node_modules/send/LICENSE create mode 100644 code-challenge/node_modules/send/README.md create mode 100644 code-challenge/node_modules/send/index.js create mode 100644 code-challenge/node_modules/send/node_modules/http-errors/HISTORY.md create mode 100644 code-challenge/node_modules/send/node_modules/http-errors/LICENSE create mode 100644 code-challenge/node_modules/send/node_modules/http-errors/README.md create mode 100644 code-challenge/node_modules/send/node_modules/http-errors/index.js create mode 100644 code-challenge/node_modules/send/node_modules/http-errors/package.json create mode 100644 code-challenge/node_modules/send/node_modules/statuses/LICENSE create mode 100644 code-challenge/node_modules/send/node_modules/statuses/README.md create mode 100644 code-challenge/node_modules/send/node_modules/statuses/codes.json create mode 100644 code-challenge/node_modules/send/node_modules/statuses/index.js create mode 100644 code-challenge/node_modules/send/node_modules/statuses/package.json create mode 100644 code-challenge/node_modules/send/package.json create mode 100644 code-challenge/node_modules/serve-favicon/HISTORY.md create mode 100644 code-challenge/node_modules/serve-favicon/LICENSE create mode 100644 code-challenge/node_modules/serve-favicon/README.md create mode 100644 code-challenge/node_modules/serve-favicon/index.js create mode 100644 code-challenge/node_modules/serve-favicon/package.json create mode 100644 code-challenge/node_modules/serve-static/HISTORY.md create mode 100644 code-challenge/node_modules/serve-static/LICENSE create mode 100644 code-challenge/node_modules/serve-static/README.md create mode 100644 code-challenge/node_modules/serve-static/index.js create mode 100644 code-challenge/node_modules/serve-static/node_modules/http-errors/HISTORY.md create mode 100644 code-challenge/node_modules/serve-static/node_modules/http-errors/LICENSE create mode 100644 code-challenge/node_modules/serve-static/node_modules/http-errors/README.md create mode 100644 code-challenge/node_modules/serve-static/node_modules/http-errors/index.js create mode 100644 code-challenge/node_modules/serve-static/node_modules/http-errors/package.json create mode 100644 code-challenge/node_modules/serve-static/node_modules/send/HISTORY.md create mode 100644 code-challenge/node_modules/serve-static/node_modules/send/LICENSE create mode 100644 code-challenge/node_modules/serve-static/node_modules/send/README.md create mode 100644 code-challenge/node_modules/serve-static/node_modules/send/index.js create mode 100644 code-challenge/node_modules/serve-static/node_modules/send/package.json create mode 100644 code-challenge/node_modules/serve-static/node_modules/statuses/LICENSE create mode 100644 code-challenge/node_modules/serve-static/node_modules/statuses/README.md create mode 100644 code-challenge/node_modules/serve-static/node_modules/statuses/codes.json create mode 100644 code-challenge/node_modules/serve-static/node_modules/statuses/index.js create mode 100644 code-challenge/node_modules/serve-static/node_modules/statuses/package.json create mode 100644 code-challenge/node_modules/serve-static/package.json create mode 100644 code-challenge/node_modules/setprototypeof/LICENSE create mode 100644 code-challenge/node_modules/setprototypeof/README.md create mode 100644 code-challenge/node_modules/setprototypeof/index.js create mode 100644 code-challenge/node_modules/setprototypeof/package.json create mode 100644 code-challenge/node_modules/source-map/README.md create mode 100644 code-challenge/node_modules/source-map/build/assert-shim.js create mode 100644 code-challenge/node_modules/source-map/build/mini-require.js create mode 100644 code-challenge/node_modules/source-map/build/prefix-source-map.jsm create mode 100644 code-challenge/node_modules/source-map/build/prefix-utils.jsm create mode 100644 code-challenge/node_modules/source-map/build/suffix-browser.js create mode 100644 code-challenge/node_modules/source-map/build/suffix-source-map.jsm create mode 100644 code-challenge/node_modules/source-map/build/suffix-utils.jsm create mode 100644 code-challenge/node_modules/source-map/build/test-prefix.js create mode 100644 code-challenge/node_modules/source-map/build/test-suffix.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/array-set.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/base64-vlq.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/base64.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/binary-search.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/mapping-list.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/quick-sort.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/source-map-consumer.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/source-map-generator.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/source-node.js create mode 100644 code-challenge/node_modules/source-map/lib/source-map/util.js create mode 100644 code-challenge/node_modules/source-map/package.json create mode 100644 code-challenge/node_modules/statuses/HISTORY.md create mode 100644 code-challenge/node_modules/statuses/LICENSE create mode 100644 code-challenge/node_modules/statuses/README.md create mode 100644 code-challenge/node_modules/statuses/codes.json create mode 100644 code-challenge/node_modules/statuses/index.js create mode 100644 code-challenge/node_modules/statuses/package.json create mode 100644 code-challenge/node_modules/stream-consume/.npmignore create mode 100644 code-challenge/node_modules/stream-consume/README.md create mode 100644 code-challenge/node_modules/stream-consume/index.js create mode 100644 code-challenge/node_modules/stream-consume/package.json create mode 100644 code-challenge/node_modules/stream-consume/test/tests.js create mode 100644 code-challenge/node_modules/string_decoder/.npmignore create mode 100644 code-challenge/node_modules/string_decoder/LICENSE create mode 100644 code-challenge/node_modules/string_decoder/README.md create mode 100644 code-challenge/node_modules/string_decoder/index.js create mode 100644 code-challenge/node_modules/string_decoder/package.json create mode 100644 code-challenge/node_modules/superagent/.npmignore create mode 100644 code-challenge/node_modules/superagent/.travis.yml create mode 100644 code-challenge/node_modules/superagent/.zuul.yml create mode 100644 code-challenge/node_modules/superagent/Contributing.md create mode 100644 code-challenge/node_modules/superagent/History.md create mode 100644 code-challenge/node_modules/superagent/LICENSE create mode 100644 code-challenge/node_modules/superagent/Makefile create mode 100644 code-challenge/node_modules/superagent/Readme.md create mode 100644 code-challenge/node_modules/superagent/component.json create mode 100644 code-challenge/node_modules/superagent/docs/head.html create mode 100644 code-challenge/node_modules/superagent/docs/images/bg.png create mode 100644 code-challenge/node_modules/superagent/docs/index.md create mode 100644 code-challenge/node_modules/superagent/docs/style.css create mode 100644 code-challenge/node_modules/superagent/docs/tail.html create mode 100644 code-challenge/node_modules/superagent/docs/test.html create mode 100644 code-challenge/node_modules/superagent/lib/client.js create mode 100644 code-challenge/node_modules/superagent/lib/is-object.js create mode 100644 code-challenge/node_modules/superagent/lib/node/agent.js create mode 100644 code-challenge/node_modules/superagent/lib/node/index.js create mode 100644 code-challenge/node_modules/superagent/lib/node/parsers/image.js create mode 100644 code-challenge/node_modules/superagent/lib/node/parsers/index.js create mode 100644 code-challenge/node_modules/superagent/lib/node/parsers/json.js create mode 100644 code-challenge/node_modules/superagent/lib/node/parsers/text.js create mode 100644 code-challenge/node_modules/superagent/lib/node/parsers/urlencoded.js create mode 100644 code-challenge/node_modules/superagent/lib/node/part.js create mode 100644 code-challenge/node_modules/superagent/lib/node/response.js create mode 100644 code-challenge/node_modules/superagent/lib/node/utils.js create mode 100644 code-challenge/node_modules/superagent/lib/request-base.js create mode 100644 code-challenge/node_modules/superagent/lib/request.js create mode 100644 code-challenge/node_modules/superagent/package.json create mode 100644 code-challenge/node_modules/superagent/superagent.js create mode 100644 code-challenge/node_modules/supertest/.eslintrc create mode 100644 code-challenge/node_modules/supertest/.npmignore create mode 100644 code-challenge/node_modules/supertest/.travis.yml create mode 100644 code-challenge/node_modules/supertest/History.md create mode 100644 code-challenge/node_modules/supertest/LICENSE create mode 100644 code-challenge/node_modules/supertest/Readme.md create mode 100644 code-challenge/node_modules/supertest/index.js create mode 100644 code-challenge/node_modules/supertest/lib/agent.js create mode 100644 code-challenge/node_modules/supertest/lib/test.js create mode 100644 code-challenge/node_modules/supertest/package.json create mode 100644 code-challenge/node_modules/supertest/test/.eslintrc create mode 100644 code-challenge/node_modules/supertest/test/fixtures/test_cert.pem create mode 100644 code-challenge/node_modules/supertest/test/fixtures/test_key.pem create mode 100644 code-challenge/node_modules/supertest/test/supertest.js create mode 100644 code-challenge/node_modules/supports-color/browser.js create mode 100644 code-challenge/node_modules/supports-color/index.js create mode 100644 code-challenge/node_modules/supports-color/license create mode 100644 code-challenge/node_modules/supports-color/package.json create mode 100644 code-challenge/node_modules/supports-color/readme.md create mode 100644 code-challenge/node_modules/transformers/.npmignore create mode 100644 code-challenge/node_modules/transformers/README.md create mode 100644 code-challenge/node_modules/transformers/history.md create mode 100644 code-challenge/node_modules/transformers/lib/shared.js create mode 100644 code-challenge/node_modules/transformers/lib/transformers.js create mode 120000 code-challenge/node_modules/transformers/node_modules/.bin/uglifyjs create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/.npmignore create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/.travis.yml create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/LICENSE create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/index.js create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/package.json create mode 100644 code-challenge/node_modules/transformers/node_modules/is-promise/readme.md create mode 100644 code-challenge/node_modules/transformers/node_modules/promise/.npmignore create mode 100644 code-challenge/node_modules/transformers/node_modules/promise/Readme.md create mode 100644 code-challenge/node_modules/transformers/node_modules/promise/index.js create mode 100644 code-challenge/node_modules/transformers/node_modules/promise/package.json create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/.npmignore create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/.travis.yml create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/CHANGELOG.md create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/LICENSE create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/Makefile.dryice.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/README.md create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/assert-shim.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/mini-require.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/prefix-source-map.jsm create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/prefix-utils.jsm create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/suffix-browser.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/suffix-source-map.jsm create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/suffix-utils.jsm create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/test-prefix.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/build/test-suffix.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/array-set.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/base64-vlq.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/base64.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/binary-search.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/mapping-list.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-consumer.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/source-map-generator.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/source-node.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/lib/source-map/util.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/package.json create mode 100755 code-challenge/node_modules/transformers/node_modules/source-map/test/run-tests.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-api.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-array-set.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-base64-vlq.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-base64.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-binary-search.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-dog-fooding.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-consumer.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-source-map-generator.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-source-node.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/test-util.js create mode 100644 code-challenge/node_modules/transformers/node_modules/source-map/test/source-map/util.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/.npmignore create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/README.md create mode 100755 code-challenge/node_modules/transformers/node_modules/uglify-js/bin/uglifyjs create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/ast.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/compress.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/mozilla-ast.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/output.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/parse.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/scope.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/sourcemap.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/transform.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/lib/utils.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/package.json create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/arrays.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/blocks.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/conditionals.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/dead-code.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/debugger.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/drop-unused.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/issue-105.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/issue-12.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/issue-22.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/issue-44.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/issue-59.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/labels.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/loops.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/properties.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/sequences.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/test/compress/switch.js create mode 100755 code-challenge/node_modules/transformers/node_modules/uglify-js/test/run-tests.js create mode 100644 code-challenge/node_modules/transformers/node_modules/uglify-js/tools/node.js create mode 100644 code-challenge/node_modules/transformers/package.json create mode 100644 code-challenge/node_modules/type-is/HISTORY.md create mode 100644 code-challenge/node_modules/type-is/LICENSE create mode 100644 code-challenge/node_modules/type-is/README.md create mode 100644 code-challenge/node_modules/type-is/index.js create mode 100644 code-challenge/node_modules/type-is/package.json create mode 100644 code-challenge/node_modules/uglify-js/LICENSE create mode 100644 code-challenge/node_modules/uglify-js/README.md create mode 100755 code-challenge/node_modules/uglify-js/bin/extract-props.js create mode 100755 code-challenge/node_modules/uglify-js/bin/uglifyjs create mode 100644 code-challenge/node_modules/uglify-js/lib/ast.js create mode 100644 code-challenge/node_modules/uglify-js/lib/compress.js create mode 100644 code-challenge/node_modules/uglify-js/lib/mozilla-ast.js create mode 100644 code-challenge/node_modules/uglify-js/lib/output.js create mode 100644 code-challenge/node_modules/uglify-js/lib/parse.js create mode 100644 code-challenge/node_modules/uglify-js/lib/propmangle.js create mode 100644 code-challenge/node_modules/uglify-js/lib/scope.js create mode 100644 code-challenge/node_modules/uglify-js/lib/sourcemap.js create mode 100644 code-challenge/node_modules/uglify-js/lib/transform.js create mode 100644 code-challenge/node_modules/uglify-js/lib/utils.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/README.md create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/dist/source-map.debug.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/dist/source-map.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/dist/source-map.min.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/dist/source-map.min.js.map create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/array-set.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/base64-vlq.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/base64.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/binary-search.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/mapping-list.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/quick-sort.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/source-map-consumer.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/source-map-generator.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/source-node.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/lib/util.js create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/package.json create mode 100644 code-challenge/node_modules/uglify-js/node_modules/source-map/source-map.js create mode 100644 code-challenge/node_modules/uglify-js/package.json create mode 100644 code-challenge/node_modules/uglify-js/tools/domprops.json create mode 100644 code-challenge/node_modules/uglify-js/tools/exports.js create mode 100644 code-challenge/node_modules/uglify-js/tools/node.js create mode 100644 code-challenge/node_modules/uglify-js/tools/props.html create mode 100644 code-challenge/node_modules/uglify-to-browserify/.npmignore create mode 100644 code-challenge/node_modules/uglify-to-browserify/.travis.yml create mode 100644 code-challenge/node_modules/uglify-to-browserify/LICENSE create mode 100644 code-challenge/node_modules/uglify-to-browserify/README.md create mode 100644 code-challenge/node_modules/uglify-to-browserify/index.js create mode 100644 code-challenge/node_modules/uglify-to-browserify/package.json create mode 100644 code-challenge/node_modules/uglify-to-browserify/test/index.js create mode 100644 code-challenge/node_modules/unpipe/HISTORY.md create mode 100644 code-challenge/node_modules/unpipe/LICENSE create mode 100644 code-challenge/node_modules/unpipe/README.md create mode 100644 code-challenge/node_modules/unpipe/index.js create mode 100644 code-challenge/node_modules/unpipe/package.json create mode 100644 code-challenge/node_modules/utf8/LICENSE-MIT.txt create mode 100644 code-challenge/node_modules/utf8/README.md create mode 100644 code-challenge/node_modules/utf8/package.json create mode 100644 code-challenge/node_modules/utf8/utf8.js create mode 100644 code-challenge/node_modules/util-deprecate/History.md create mode 100644 code-challenge/node_modules/util-deprecate/LICENSE create mode 100644 code-challenge/node_modules/util-deprecate/README.md create mode 100644 code-challenge/node_modules/util-deprecate/browser.js create mode 100644 code-challenge/node_modules/util-deprecate/node.js create mode 100644 code-challenge/node_modules/util-deprecate/package.json create mode 100644 code-challenge/node_modules/utils-merge/.travis.yml create mode 100644 code-challenge/node_modules/utils-merge/LICENSE create mode 100644 code-challenge/node_modules/utils-merge/README.md create mode 100644 code-challenge/node_modules/utils-merge/index.js create mode 100644 code-challenge/node_modules/utils-merge/package.json create mode 100644 code-challenge/node_modules/vary/HISTORY.md create mode 100644 code-challenge/node_modules/vary/LICENSE create mode 100644 code-challenge/node_modules/vary/README.md create mode 100644 code-challenge/node_modules/vary/index.js create mode 100644 code-challenge/node_modules/vary/package.json create mode 100644 code-challenge/node_modules/void-elements/.gitattributes create mode 100644 code-challenge/node_modules/void-elements/.npmignore create mode 100644 code-challenge/node_modules/void-elements/.travis.yml create mode 100644 code-challenge/node_modules/void-elements/LICENSE create mode 100644 code-challenge/node_modules/void-elements/README.md create mode 100644 code-challenge/node_modules/void-elements/index.js create mode 100644 code-challenge/node_modules/void-elements/package.json create mode 100644 code-challenge/node_modules/void-elements/pre-publish.js create mode 100644 code-challenge/node_modules/void-elements/test/index.js create mode 100644 code-challenge/node_modules/window-size/LICENSE-MIT create mode 100644 code-challenge/node_modules/window-size/README.md create mode 100644 code-challenge/node_modules/window-size/index.js create mode 100644 code-challenge/node_modules/window-size/package.json create mode 100644 code-challenge/node_modules/with/.npmignore create mode 100644 code-challenge/node_modules/with/LICENSE create mode 100644 code-challenge/node_modules/with/README.md create mode 100644 code-challenge/node_modules/with/index.js create mode 120000 code-challenge/node_modules/with/node_modules/.bin/acorn create mode 100644 code-challenge/node_modules/with/node_modules/acorn/.editorconfig create mode 100644 code-challenge/node_modules/with/node_modules/acorn/.gitattributes create mode 100644 code-challenge/node_modules/with/node_modules/acorn/.npmignore create mode 100644 code-challenge/node_modules/with/node_modules/acorn/.tern-project create mode 100644 code-challenge/node_modules/with/node_modules/acorn/.travis.yml create mode 100644 code-challenge/node_modules/with/node_modules/acorn/AUTHORS create mode 100644 code-challenge/node_modules/with/node_modules/acorn/LICENSE create mode 100644 code-challenge/node_modules/with/node_modules/acorn/README.md create mode 100755 code-challenge/node_modules/with/node_modules/acorn/bin/acorn create mode 100644 code-challenge/node_modules/with/node_modules/acorn/bin/build-acorn.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/bin/generate-identifier-regex.js create mode 100755 code-challenge/node_modules/with/node_modules/acorn/bin/prepublish.sh create mode 100755 code-challenge/node_modules/with/node_modules/acorn/bin/update_authors.sh create mode 100755 code-challenge/node_modules/with/node_modules/acorn/bin/without_eval create mode 100644 code-challenge/node_modules/with/node_modules/acorn/dist/.keep create mode 100644 code-challenge/node_modules/with/node_modules/acorn/dist/acorn.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/dist/acorn_csp.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/dist/acorn_loose.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/dist/walk.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/package.json create mode 100755 code-challenge/node_modules/with/node_modules/acorn/src/expression.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/identifier.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/index.js create mode 100755 code-challenge/node_modules/with/node_modules/acorn/src/location.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/acorn_loose.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/expression.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/index.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/parseutil.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/state.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/statement.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/loose/tokenize.js create mode 100755 code-challenge/node_modules/with/node_modules/acorn/src/lval.js create mode 100755 code-challenge/node_modules/with/node_modules/acorn/src/node.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/options.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/parseutil.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/state.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/statement.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/tokencontext.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/tokenize.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/tokentype.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/util.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/walk/index.js create mode 100644 code-challenge/node_modules/with/node_modules/acorn/src/whitespace.js create mode 100644 code-challenge/node_modules/with/package.json create mode 100644 code-challenge/node_modules/wordwrap/LICENSE create mode 100644 code-challenge/node_modules/wordwrap/README.markdown create mode 100644 code-challenge/node_modules/wordwrap/example/center.js create mode 100644 code-challenge/node_modules/wordwrap/example/meat.js create mode 100644 code-challenge/node_modules/wordwrap/index.js create mode 100644 code-challenge/node_modules/wordwrap/package.json create mode 100644 code-challenge/node_modules/wordwrap/test/break.js create mode 100644 code-challenge/node_modules/wordwrap/test/idleness.txt create mode 100644 code-challenge/node_modules/wordwrap/test/wrap.js create mode 100644 code-challenge/node_modules/wrappy/README.md create mode 100644 code-challenge/node_modules/wrappy/package.json create mode 100644 code-challenge/node_modules/wrappy/wrappy.js create mode 100644 code-challenge/node_modules/yargs/CHANGELOG.md create mode 100644 code-challenge/node_modules/yargs/LICENSE create mode 100644 code-challenge/node_modules/yargs/README.md create mode 100644 code-challenge/node_modules/yargs/completion.sh.hbs create mode 100644 code-challenge/node_modules/yargs/index.js create mode 100644 code-challenge/node_modules/yargs/lib/completion.js create mode 100644 code-challenge/node_modules/yargs/lib/parser.js create mode 100644 code-challenge/node_modules/yargs/lib/usage.js create mode 100644 code-challenge/node_modules/yargs/lib/validation.js create mode 100644 code-challenge/node_modules/yargs/package.json create mode 100644 code-challenge/package.json create mode 100644 code-challenge/public/stylesheets/style.css create mode 100644 code-challenge/routes/index.js create mode 100644 code-challenge/routes/npm-debug.log create mode 100644 code-challenge/routes/users.js create mode 100644 code-challenge/test/test.js create mode 100644 code-challenge/views/error.jade create mode 100644 code-challenge/views/index.jade create mode 100644 code-challenge/views/layout.jade create mode 100644 code-challenge/views/npm-debug.log diff --git a/README.md b/README.md index d2d87c3..07bf5c7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,19 @@ +##Junaid's Coding Challenge Submission for Skyfit## +This submission is for the coding challenge listed below. + +###How is the application run? + +This is an express.js application. Please complete the following steps to run the app: + +1. git clone this repository and this branch. +2. From the root of the code-challenge directory run: npm install +3. From the root of the code-challenge directory run: npm run + +###How are the unit tests run? + +1. mocha /code-challenge/test/test.js + + ## NodeJS Programming Task In order to be considered for the NodeJS position, you must complete the following steps. diff --git a/code-challenge/app.js b/code-challenge/app.js new file mode 100644 index 0000000..80a3c36 --- /dev/null +++ b/code-challenge/app.js @@ -0,0 +1,60 @@ +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 routes = 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('/', routes); +app.use('/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 handlers + +// development error handler +// will print stacktrace +if (app.get('env') === 'development') { + app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: err + }); + }); +} + +// production error handler +// no stacktraces leaked to user +app.use(function(err, req, res, next) { + res.status(err.status || 500); + res.render('error', { + message: err.message, + error: {} + }); +}); + + +module.exports = app; diff --git a/code-challenge/bin/www b/code-challenge/bin/www new file mode 100755 index 0000000..c7321eb --- /dev/null +++ b/code-challenge/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('code-challenge: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/code-challenge/github b/code-challenge/github new file mode 160000 index 0000000..96cc1ac --- /dev/null +++ b/code-challenge/github @@ -0,0 +1 @@ +Subproject commit 96cc1acdfdb2d76013858af38f900d7b4f513713 diff --git a/code-challenge/node_modules/.bin/_mocha b/code-challenge/node_modules/.bin/_mocha new file mode 120000 index 0000000..f2a54ff --- /dev/null +++ b/code-challenge/node_modules/.bin/_mocha @@ -0,0 +1 @@ +../mocha/bin/_mocha \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/acorn b/code-challenge/node_modules/.bin/acorn new file mode 120000 index 0000000..cf76760 --- /dev/null +++ b/code-challenge/node_modules/.bin/acorn @@ -0,0 +1 @@ +../acorn/bin/acorn \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/cleancss b/code-challenge/node_modules/.bin/cleancss new file mode 120000 index 0000000..2a3439e --- /dev/null +++ b/code-challenge/node_modules/.bin/cleancss @@ -0,0 +1 @@ +../clean-css/bin/cleancss \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/jade b/code-challenge/node_modules/.bin/jade new file mode 120000 index 0000000..65a3bac --- /dev/null +++ b/code-challenge/node_modules/.bin/jade @@ -0,0 +1 @@ +../jade/bin/jade.js \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/mime b/code-challenge/node_modules/.bin/mime new file mode 120000 index 0000000..fbb7ee0 --- /dev/null +++ b/code-challenge/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/mkdirp b/code-challenge/node_modules/.bin/mkdirp new file mode 120000 index 0000000..017896c --- /dev/null +++ b/code-challenge/node_modules/.bin/mkdirp @@ -0,0 +1 @@ +../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/mocha b/code-challenge/node_modules/.bin/mocha new file mode 120000 index 0000000..43c668d --- /dev/null +++ b/code-challenge/node_modules/.bin/mocha @@ -0,0 +1 @@ +../mocha/bin/mocha \ No newline at end of file diff --git a/code-challenge/node_modules/.bin/uglifyjs b/code-challenge/node_modules/.bin/uglifyjs new file mode 120000 index 0000000..fef3468 --- /dev/null +++ b/code-challenge/node_modules/.bin/uglifyjs @@ -0,0 +1 @@ +../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/code-challenge/node_modules/accepts/HISTORY.md b/code-challenge/node_modules/accepts/HISTORY.md new file mode 100644 index 0000000..397636e --- /dev/null +++ b/code-challenge/node_modules/accepts/HISTORY.md @@ -0,0 +1,170 @@ +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/code-challenge/node_modules/accepts/LICENSE b/code-challenge/node_modules/accepts/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/accepts/README.md b/code-challenge/node_modules/accepts/README.md new file mode 100644 index 0000000..ae36676 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/accepts/index.js b/code-challenge/node_modules/accepts/index.js new file mode 100644 index 0000000..e80192a --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/accepts/package.json b/code-challenge/node_modules/accepts/package.json new file mode 100644 index 0000000..b54ab64 --- /dev/null +++ b/code-challenge/node_modules/accepts/package.json @@ -0,0 +1,132 @@ +{ + "_args": [ + [ + { + "raw": "accepts@~1.2.12", + "scope": null, + "escapedName": "accepts", + "name": "accepts", + "rawSpec": "~1.2.12", + "spec": ">=1.2.12 <1.3.0", + "type": "range" + }, + "/home/hellroaster/example-nodejs-challenge/code-challenge/node_modules/express" + ] + ], + "_from": "accepts@>=1.2.12 <1.3.0", + "_id": "accepts@1.2.13", + "_inCache": true, + "_installable": true, + "_location": "/accepts", + "_npmUser": { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + "_npmVersion": "1.4.28", + "_phantomChildren": {}, + "_requested": { + "raw": "accepts@~1.2.12", + "scope": null, + "escapedName": "accepts", + "name": "accepts", + "rawSpec": "~1.2.12", + "spec": ">=1.2.12 <1.3.0", + "type": "range" + }, + "_requiredBy": [ + "/express" + ], + "_resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", + "_shasum": "e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea", + "_shrinkwrap": null, + "_spec": "accepts@~1.2.12", + "_where": "/home/hellroaster/example-nodejs-challenge/code-challenge/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.6", + "negotiator": "0.5.3" + }, + "description": "Higher-level content negotiation", + "devDependencies": { + "istanbul": "0.3.19", + "mocha": "~1.21.5" + }, + "directories": {}, + "dist": { + "shasum": "e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea", + "tarball": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz" + }, + "engines": { + "node": ">= 0.6" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "gitHead": "b7e15ecb25dacc0b2133ed0553d64f8a79537e01", + "homepage": "https://github.com/jshttp/accepts", + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ], + "license": "MIT", + "maintainers": [ + { + "name": "jongleberry", + "email": "jonathanrichardong@gmail.com" + }, + { + "name": "federomero", + "email": "federomero@gmail.com" + }, + { + "name": "dougwilson", + "email": "doug@somethingdoug.com" + }, + { + "name": "fishrock123", + "email": "fishrock123@rocketmail.com" + }, + { + "name": "tjholowaychuk", + "email": "tj@vision-media.ca" + }, + { + "name": "mscdex", + "email": "mscdex@mscdex.net" + }, + { + "name": "defunctzombie", + "email": "shtylman@gmail.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.2.13" +} diff --git a/code-challenge/node_modules/acorn-globals/LICENSE b/code-challenge/node_modules/acorn-globals/LICENSE new file mode 100644 index 0000000..27cc9f3 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn-globals/README.md b/code-challenge/node_modules/acorn-globals/README.md new file mode 100644 index 0000000..d8cd372 --- /dev/null +++ b/code-challenge/node_modules/acorn-globals/README.md @@ -0,0 +1,76 @@ +# acorn-globals + +Detect global variables in JavaScript using acorn + +[![Build Status](https://img.shields.io/travis/ForbesLindesay/acorn-globals/master.svg)](https://travis-ci.org/ForbesLindesay/acorn-globals) +[![Dependency Status](https://img.shields.io/david/ForbesLindesay/acorn-globals.svg)](https://david-dm.org/ForbesLindesay/acorn-globals) +[![NPM version](https://img.shields.io/npm/v/acorn-globals.svg)](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/code-challenge/node_modules/acorn-globals/index.js b/code-challenge/node_modules/acorn-globals/index.js new file mode 100644 index 0000000..ff924c9 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn-globals/package.json b/code-challenge/node_modules/acorn-globals/package.json new file mode 100644 index 0000000..aaa5ff0 --- /dev/null +++ b/code-challenge/node_modules/acorn-globals/package.json @@ -0,0 +1,101 @@ +{ + "_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/hellroaster/example-nodejs-challenge/code-challenge/node_modules/with" + ] + ], + "_from": "acorn-globals@>=1.0.3 <2.0.0", + "_id": "acorn-globals@1.0.9", + "_inCache": true, + "_installable": 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/hellroaster/example-nodejs-challenge/code-challenge/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/code-challenge/node_modules/acorn/.editorconfig b/code-challenge/node_modules/acorn/.editorconfig new file mode 100644 index 0000000..c14d5c6 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/.gitattributes b/code-challenge/node_modules/acorn/.gitattributes new file mode 100644 index 0000000..fcadb2c --- /dev/null +++ b/code-challenge/node_modules/acorn/.gitattributes @@ -0,0 +1 @@ +* text eol=lf diff --git a/code-challenge/node_modules/acorn/.npmignore b/code-challenge/node_modules/acorn/.npmignore new file mode 100644 index 0000000..ecba291 --- /dev/null +++ b/code-challenge/node_modules/acorn/.npmignore @@ -0,0 +1,3 @@ +/.tern-port +/test +/local diff --git a/code-challenge/node_modules/acorn/.tern-project b/code-challenge/node_modules/acorn/.tern-project new file mode 100644 index 0000000..6718ce0 --- /dev/null +++ b/code-challenge/node_modules/acorn/.tern-project @@ -0,0 +1,6 @@ +{ + "plugins": { + "node": true, + "es_modules": true + } +} \ No newline at end of file diff --git a/code-challenge/node_modules/acorn/.travis.yml b/code-challenge/node_modules/acorn/.travis.yml new file mode 100644 index 0000000..f50c379 --- /dev/null +++ b/code-challenge/node_modules/acorn/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +sudo: false +node_js: + - '0.10' + - '0.12' + - '4' diff --git a/code-challenge/node_modules/acorn/AUTHORS b/code-challenge/node_modules/acorn/AUTHORS new file mode 100644 index 0000000..0e8f48b --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/LICENSE b/code-challenge/node_modules/acorn/LICENSE new file mode 100644 index 0000000..d4c7fc5 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/README.md b/code-challenge/node_modules/acorn/README.md new file mode 100644 index 0000000..acd39a8 --- /dev/null +++ b/code-challenge/node_modules/acorn/README.md @@ -0,0 +1,396 @@ +# Acorn + +[![Build Status](https://travis-ci.org/ternjs/acorn.svg?branch=master)](https://travis-ci.org/ternjs/acorn) +[![NPM version](https://img.shields.io/npm/v/acorn.svg)](https://www.npmjs.com/package/acorn) +[Author funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png?force)](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/code-challenge/node_modules/acorn/bin/acorn b/code-challenge/node_modules/acorn/bin/acorn new file mode 100755 index 0000000..db07909 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/bin/build-acorn.js b/code-challenge/node_modules/acorn/bin/build-acorn.js new file mode 100644 index 0000000..71f2cf9 --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/bin/generate-identifier-regex.js b/code-challenge/node_modules/acorn/bin/generate-identifier-regex.js new file mode 100644 index 0000000..0d7c50f --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/bin/update_authors.sh b/code-challenge/node_modules/acorn/bin/update_authors.sh new file mode 100755 index 0000000..466c8db --- /dev/null +++ b/code-challenge/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/code-challenge/node_modules/acorn/dist/.keep b/code-challenge/node_modules/acorn/dist/.keep new file mode 100644 index 0000000..e69de29 diff --git a/code-challenge/node_modules/acorn/dist/acorn.js b/code-challenge/node_modules/acorn/dist/acorn.js new file mode 100644 index 0000000..9419f86 --- /dev/null +++ b/code-challenge/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() + // ` +

foo

+

bar

+``` + +Jade 同样支持不输出的注释,加一个短横线就行了: + +```jade +//- will not output within markup +p foo +p bar +``` + +渲染为: + +```html +

foo

+

bar

+``` + + +### 块注释 + +块注释也是支持的: + +```jade +body + // + #content + h1 Example +``` + +渲染为: + +```html + + + +``` + +Jade 同样很好的支持了条件注释: + +```jade +body + //if IE + a(href='http://www.mozilla.com/en-US/firefox/') Get Firefox +``` + +渲染为: + +```html + + + +``` + + +### 内联 + +Jade 支持以自然的方式定义标签嵌套: + +```jade +ul + li.first + a(href='#') foo + li + a(href='#') bar + li.last + a(href='#') baz +``` + + +### 块展开 + +块展开可以帮助你在一行内创建嵌套的标签,下面的例子和上面的是一样的: + +```jade +ul + li.first: a(href='#') foo + li: a(href='#') bar + li.last: a(href='#') baz +``` + + +### Case + +`case` 表达式按下面这样的形式写: + +```jade +html + body + friends = 10 + case friends + when 0 + p you have no friends + when 1 + p you have a friend + default + p you have #{friends} friends +``` + +块展开在这里也可以使用: + +```jade +friends = 5 + +html + body + case friends + when 0: p you have no friends + when 1: p you have a friend + default: p you have #{friends} friends +``` + + +### 属性 + +Jade 现在支持使用 `(` 和 `)` 作为属性分隔符 + +```jade +a(href='/login', title='View login page') Login +``` + +当一个值是 `undefined` 或者 `null` 属性 _不_ 会被加上, +所以呢,它不会编译出 'something="null"'. + +```jade +div(something=null) +``` + +Boolean 属性也是支持的: + +```jade +input(type="checkbox", checked) +``` + +使用代码的 Boolean 属性只有当属性为 `true` 时才会输出: + +```jade +input(type="checkbox", checked=someValue) +``` + +多行同样也是可用的: + +```jade +input(type='checkbox', + name='agreement', + checked) +``` + +多行的时候可以不加逗号: + +```jade +input(type='checkbox' + name='agreement' + checked) +``` + +加点空格,格式好看一点?同样支持 + +```jade +input( + type='checkbox' + name='agreement' + checked) +``` + +冒号也是支持的: + +```jade +rss(xmlns:atom="atom") +``` + +假如我有一个 `user` 对象 `{ id: 12, name: 'tobi' }` +我们希望创建一个指向 `/user/12` 的链接 `href`, 我们可以使用普通的 JavaScript 字符串连接,如下: + +```jade +a(href='/user/' + user.id)= user.name +``` + +或者我们使用 Jade 的修改方式, 这个我想很多使用 Ruby 或者 CoffeeScript 的人会看起来像普通的 JS..: + +```jade +a(href='/user/#{user.id}')= user.name +``` + +`class` 属性是一个特殊的属性,你可以直接传递一个数组,比如 `bodyClasses = ['user', 'authenticated']` : + +```jade +body(class=bodyClasses) +``` + + +### HTML + +内联的 HTML 是可以的,我们可以使用管道定义一段文本 : + +```jade +html + body + |

Title

+ |

foo bar baz

+``` + +或者我们可以使用 `.` 来告诉 Jade 我们需要一段文本: + +```jade +html + body. +

Title

+

foo bar baz

+``` + +上面的两个例子都会渲染成相同的结果: + +```jade +

Title

+

foo bar baz

+ +``` + + 这条规则适应于在 Jade 里的任何文本: + +``` +html + body + h1 User #{name} +``` + +
+### Doctypes + +添加文档类型只需要简单的使用 `!!!`, 或者 `doctype` 跟上下面的可选项: + +```jade +!!! +``` + +会渲染出 _transitional_ 文档类型, 或者: + +```jade +!!! 5 +``` + +或 + +```jade +!!! html +``` + +或 + +```jade +doctype html +``` + +Doctype 是大小写不敏感的, 所以下面两个是一样的: + +```jade +doctype Basic +doctype basic +``` + +当然也是可以直接传递一段文档类型的文本: + +```jade +doctype html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" +``` + +渲染后: + +```html + +``` + +会输出 _HTML5_ 文档类型. 下面的默认的文档类型,可以很简单的扩展: + +```javascript +var doctypes = exports.doctypes = { + '5': '', + 'xml': '', + 'default': '', + 'transitional': '', + 'strict': '', + 'frameset': '', + '1.1': '', + 'basic': '', + 'mobile': '' +}; +``` + +通过下面的代码可以很简单的改变默认的文档类型: + +```javascript + jade.doctypes.default = 'whatever you want'; +``` + + +## 过滤器 + +过滤器前缀 `:`, 比如 `:markdown` 会把下面块里的文本交给专门的函数进行处理。查看顶部 _特性_ 里有哪些可用的过滤器。 + +```jade +body + :markdown + Woah! jade _and_ markdown, very **cool** + we can even link to [stuff](http://google.com) +``` + +渲染为: + +```html +

Woah! jade and markdown, very cool we can even link to stuff

+``` + + +## 代码 + +Jade 目前支持三种类型的可执行代码。第一种是前缀 `-`, 这是不会被输出的: + +```jade +- var foo = 'bar'; +``` + +这可以用在条件语句或者循环中: + +```jade +- for (var key in obj) + p= obj[key] +``` + +由于 Jade 的缓存技术,下面的代码也是可以的: + +```jade +- if (foo) + ul + li yay + li foo + li worked +- else + p oh no! didnt work +``` + +哈哈,甚至是很长的循环也是可以的: + + - if (items.length) + ul + - items.forEach(function(item){ + li= item + - }) + +所以你想要的! + +下一步我们要 _转义_ 输出的代码,比如我们返回一个值,只要前缀一个 `=`: + +```jade +- var foo = 'bar' += foo +h1= foo +``` + +它会渲染为 `bar

bar

`. 为了安全起见,使用 `=` 输出的代码默认是转义的,如果想直接输出不转义的值可以使用 `!=`: + +```jade +p!= aVarContainingMoreHTML +``` + +Jade 同样是设计师友好的,它可以使 JavaScript 更直接更富表现力。比如下面的赋值语句是相等的,同时表达式还是通常的 JavaScript: + +```jade +- var foo = 'foo ' + 'bar' +foo = 'foo ' + 'bar' +``` + +Jade 会把 `if`, `else if`, `else`, `until`, `while`, `unless` 同别的优先对待, 但是你得记住它们还是普通的 JavaScript: + +```jade +if foo == 'bar' + ul + li yay + li foo + li worked +else + p oh no! didnt work +``` + +
+## 循环 + +尽管已经支持 JavaScript 原生代码,Jade 还是支持了一些特殊的标签,它们可以让模板更加易于理解,其中之一就是 `each`, 这种形式: + +```jade +each VAL[, KEY] in OBJ +``` + +一个遍历数组的例子 : + +```jade +- var items = ["one", "two", "three"] +each item in items + li= item +``` + +渲染为: + +```html +
  • one
  • +
  • two
  • +
  • three
  • +``` + +遍历一个数组同时带上索引: + +```jade +items = ["one", "two", "three"] +each item, i in items + li #{item}: #{i} +``` + +渲染为: + +```html +
  • one: 0
  • +
  • two: 1
  • +
  • three: 2
  • +``` + +遍历一个数组的键值: + +```jade +obj = { foo: 'bar' } +each val, key in obj + li #{key}: #{val} +``` + +将会渲染为:`
  • foo: bar
  • ` + +Jade 在内部会把这些语句转换成原生的 JavaScript 语句,就像使用 `users.forEach(function(user){`, 词法作用域和嵌套会像在普通的 JavaScript 中一样: + +```jade +each user in users + each role in user.roles + li= role +``` + +如果你喜欢,也可以使用 `for` : + +```jade +for user in users + for role in user.roles + li= role +``` + +
    +## 条件语句 + +Jade 条件语句和使用了(`-`) 前缀的 JavaScript 语句是一致的,然后它允许你不使用圆括号,这样会看上去对设计师更友好一点, +同时要在心里记住这个表达式渲染出的是 _常规_ JavaScript: + +```jade +for user in users + if user.role == 'admin' + p #{user.name} is an admin + else + p= user.name +``` + +和下面的使用了常规 JavaScript 的代码是相等的: + +```jade +for user in users + - if (user.role == 'admin') + p #{user.name} is an admin + - else + p= user.name +``` + +Jade 同时支持 `unless`, 这和 `if (!(expr))` 是等价的: + +```jade +for user in users + unless user.isAnonymous + p + | Click to view + a(href='/users/' + user.id)= user.name +``` + + +## 模板继承 + +Jade 支持通过 `block` 和 `extends` 关键字来实现模板继承。 一个块就是一个 Jade 的 block ,它将在子模板中实现,同时是支持递归的。 + +Jade 块如果没有内容,Jade 会添加默认内容,下面的代码默认会输出 `block scripts`, `block content`, 和 `block foot`. + +```jade +html + head + h1 My Site - #{title} + block scripts + script(src='/jquery.js') + body + block content + block foot + #footer + p some footer content +``` + +现在我们来继承这个布局,简单创建一个新文件,像下面那样直接使用 `extends`,给定路径(可以选择带 `.jade` 扩展名或者不带). 你可以定义一个或者更多的块来覆盖父级块内容, 注意到这里的 `foot` 块 _没有_ 定义,所以它还会输出父级的 "some footer content"。 + +```jade +extends extend-layout + +block scripts + script(src='/jquery.js') + script(src='/pets.js') + +block content + h1= title + each pet in pets + include pet +``` + +同样可以在一个子块里添加块,就像下面实现的块 `content` 里又定义了两个可以被实现的块 `sidebar` 和 `primary`,或者子模板直接实现 `content`。 + +```jade +extends regular-layout + +block content + .sidebar + block sidebar + p nothing + .primary + block primary + p nothing +``` + + + +## 前置、追加代码块 + +Jade允许你 _替换_ (默认)、 _前置_ 和 _追加_ blocks. 比如,假设你希望在 _所有_ 页面的头部都加上默认的脚本,你可以这么做: + + +```jade +html + head + block head + script(src='/vendor/jquery.js') + script(src='/vendor/caustic.js') + body + block content +``` + +现在假设你有一个Javascript游戏的页面,你希望在默认的脚本之外添加一些游戏相关的脚本,你可以直接`append`上代码块: + + +```jade +extends layout + +block append head + script(src='/vendor/three.js') + script(src='/game.js') +``` + +使用 `block append` 或 `block prepend` 时 `block` 是可选的: + +```jade +extends layout + +append head + script(src='/vendor/three.js') + script(src='/game.js') +``` + + +## 包含 + +Includes 允许你静态包含一段 Jade, 或者别的存放在单个文件中的东西比如 CSS, HTML 非常常见的例子是包含头部和页脚。 假设我们有一个下面目录结构的文件夹: + +``` +./layout.jade +./includes/ + ./head.jade + ./tail.jade +``` + +下面是 `layout.jade` 的内容: + +```jade +html + include includes/head + body + h1 My Site + p Welcome to my super amazing site. + include includes/foot +``` + +这两个包含 `includes/head` 和 `includes/foot` 都会读取相对于给 `layout.jade` 参数`filename` 的路径的文件, 这是一个绝对路径,不用担心Express帮你搞定这些了。Include 会解析这些文件,并且插入到已经生成的语法树中,然后渲染为你期待的内容: + +```html + + + My Site + + + +

    My Site

    +

    Welcome to my super lame site.

    + + + +``` + +前面已经提到,`include` 可以包含比如 HTML 或者 CSS 这样的内容。给定一个扩展名后,Jade 不会把这个文件当作一个 Jade 源代码,并且会把它当作一个普通文本包含进来: + +``` +html + head + //- css and js have simple filters that wrap them in +